diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 63517b5d..0fe4e90f 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -41,7 +41,7 @@ jobs: submodules: recursive - uses: actions/setup-node@v4 with: - node-version: 20 + node-version: 26 # Doesn't work -- on Windows and Mac OS, binstalled programs don't run # from the cache. ##- uses: Swatinem/rust-cache@v2 diff --git a/CHANGELOG.md b/CHANGELOG.md index c0f4b8ff..28ff3aec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -Copyright (C) 2026 Bryan A. Jones. +Copyright (C) 2026 Bryan A. Jones. This file is part of the CodeChat Editor. @@ -24,6 +24,12 @@ Changelog * No changes. +Version 0.2.5 -- 2026-Sep-21 +---------------------------- + +* Improve diagnostics when first loading the CodeChat Editor Server in the + VSCode extension. + Version 0.2.4 -- 2026-Sep-13 ---------------------------- diff --git a/Cargo.lock b/Cargo.lock index 3cdcf1f7..6f514aa9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -44,9 +44,9 @@ dependencies = [ [[package]] name = "actix-http" -version = "3.13.5" +version = "3.13.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86d62d1a48894ec9450bcde7ef1e3681205771ff6ea9c61cc5ae031145192787" +checksum = "3c4f07a021937af76abef4c458a0d6b25f63f82eec5394354deeb7de0551f523" dependencies = [ "actix-codec", "actix-service", @@ -71,7 +71,7 @@ dependencies = [ "mime", "percent-encoding", "pin-project-lite", - "rand 0.10.2", + "rand 0.10.3", "sha1", "smallvec", "tokio", @@ -82,12 +82,13 @@ dependencies = [ [[package]] name = "actix-macros" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" +checksum = "367f814ad4afbac74f07df5001214da65f65e185c90ef56c4dd8df23f8695b9b" dependencies = [ + "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.6", ] [[package]] @@ -144,9 +145,9 @@ dependencies = [ [[package]] name = "actix-utils" -version = "3.0.1" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88a1dcdff1466e3c2488e1cb5c36a71822750ad43839937f85d2f4d9f8b705d8" +checksum = "0128396dd7313f697ad05b21b1a7be7d4cbb81888704f55996e4a27db196bb4d" dependencies = [ "local-waker", "pin-project-lite", @@ -197,25 +198,25 @@ dependencies = [ [[package]] name = "actix-web-codegen" -version = "4.3.0" +version = "4.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f591380e2e68490b5dfaf1dd1aa0ebe78d84ba7067078512b4ea6e4492d622b8" +checksum = "b96b09c4878563f8ab4a5fd0c59f9f0d6e0e9f60eb9b748526a0b9604fd89c50" dependencies = [ "actix-router", "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.6", ] [[package]] name = "actix-web-httpauth" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "456348ed9dcd72a13a1f4a660449fafdecee9ac8205552e286809eb5b0b29bd3" +checksum = "7cc7d1a844a6e987662f0cb5a2a7571cde1def4581a8dd2b9ccb1fd326e84cac" dependencies = [ "actix-utils", "actix-web", - "base64 0.22.1", + "base64 0.23.1", "futures-core", "futures-util", "log", @@ -289,12 +290,12 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "ammonia" -version = "4.1.4" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc6d763210e2eb7670d1a5183a08bebefa3f97db2a738a684f2ce00bd49f681d" +checksum = "3f7ed3ac4252be4d3e36fb589ed5659356842587b21a31596a9dc89d3b2f5e2a" dependencies = [ - "cssparser", - "html5ever", + "cssparser 0.38.0", + "html5ever 0.40.1", "maplit", "url", ] @@ -420,7 +421,7 @@ checksum = "82f6aeea286b8eb4dd3431a1be1b59d290ace00f5bfd8e2a159bc2a05e2c1667" dependencies = [ "proc-macro2", "quote", - "syn 3.0.5", + "syn 3.0.6", ] [[package]] @@ -565,9 +566,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.4.6" +version = "1.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3eb0f42d6c360dc3f8a821f6bf2fdea7f72bfd36b3076eb0e6d1e9e0752fff4" +checksum = "54413ede23c2daf518f35156dfde027feb2374004d63bd497f983c8db9c0e313" dependencies = [ "find-msvc-tools", "jobserver", @@ -583,9 +584,9 @@ checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "cfg_aliases" @@ -620,9 +621,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.6.6" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "473c7e07f409a8d772161724aa8db6a765a2532a70f9667eeb7b49d3d02fbdca" +checksum = "aa8876b300ab35ba921adea3dfd70157a46249b33f95c9084ae5709785478946" dependencies = [ "clap_builder", "clap_derive", @@ -630,9 +631,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.6.6" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b48fea5a88e9ae728a2dcbedbfc0e730f7d60da42e1cb049a83c9fb8b789889" +checksum = "ec0797fb7aeb1406c84efac526901f7ec3ead2124f946b494e72879d4b54704d" dependencies = [ "anstream", "anstyle", @@ -642,21 +643,21 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.6.4" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d012d2b9d65aca7f18f4d9878a045bc17899bba951561ba5ec3c2ba1eed9a061" +checksum = "f9c751b79415d4e559e3d1fcf128e09e720eb673a06d26cf6f392d37d75b66e0" dependencies = [ "heck", "proc-macro2", "quote", - "syn 3.0.5", + "syn 3.0.6", ] [[package]] name = "clap_lex" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" +checksum = "1c133bc6a41be0d194c306b5506d15e6feeea7b1d6604bd3f8310dfb2ca96486" [[package]] name = "cmake" @@ -678,7 +679,7 @@ dependencies = [ [[package]] name = "codechat-editor-server" -version = "0.2.4" +version = "0.2.5" dependencies = [ "actix-files", "actix-rt", @@ -696,7 +697,7 @@ dependencies = [ "futures", "futures-util", "htmd", - "html5ever", + "html5ever 0.39.0", "htmlize", "imara-diff", "indoc", @@ -715,7 +716,7 @@ dependencies = [ "predicates", "pretty_assertions", "pulldown-cmark", - "rand 0.10.2", + "rand 0.10.3", "regex", "serde", "serde_json", @@ -736,7 +737,7 @@ dependencies = [ [[package]] name = "codechat-editor-standalone" -version = "0.2.4" +version = "0.2.5" dependencies = [ "actix-http", "actix-rt", @@ -752,7 +753,7 @@ dependencies = [ "path-slash", "predicates", "pretty_assertions", - "rand 0.10.2", + "rand 0.10.3", "regex", "test_utils", "tokio", @@ -764,7 +765,7 @@ dependencies = [ [[package]] name = "codechat-editor-vscode-extension" -version = "0.2.4" +version = "0.2.5" dependencies = [ "codechat-editor-server", "log", @@ -968,13 +969,24 @@ dependencies = [ "smallvec", ] +[[package]] +name = "cssparser" +version = "0.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11119743ad110e8c1bdccd930d7f5c30c99e5fc76a7b63ec9807e84eef0c5f59" +dependencies = [ + "dtoa-short", + "itoa", + "smallvec", +] + [[package]] name = "cssparser-color" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbaa233e1dcd9c13a5d3e3a8a2c0f5a727bac380398345dbcb31db4597edc86b" dependencies = [ - "cssparser", + "cssparser 0.37.0", ] [[package]] @@ -984,7 +996,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d045de693cb712d0b22c6a64be5b953f67b3ce00ab5ad3dd5d8b441886ab8e1a" dependencies = [ "quote", - "syn 3.0.5", + "syn 3.0.6", ] [[package]] @@ -1096,7 +1108,7 @@ checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8" dependencies = [ "proc-macro2", "quote", - "syn 3.0.5", + "syn 3.0.6", ] [[package]] @@ -1244,9 +1256,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e0f1c7c3a72c66fd80abe965175f7523475c0489a87d3ff9d6e8c87d87a9d2d" +checksum = "ef25905e51abafe4dcea6c15fec58c57b601cdbd0ee53d22ea1d3016c587d39b" [[package]] name = "flate2" @@ -1377,7 +1389,7 @@ checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn 3.0.5", + "syn 3.0.6", ] [[package]] @@ -1522,7 +1534,7 @@ name = "htmd" version = "0.5.5" source = "git+https://github.com/bjones1/htmd.git?branch=dom-interface#68e54497edf1be23dbf73fe1bd6bdf6170b729cc" dependencies = [ - "html5ever", + "html5ever 0.39.0", "markup5ever_rcdom", "phf 0.14.0", ] @@ -1534,7 +1546,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46a1761807faccc9a19e86944bbf40610014066306f96edcdedc2fb714bcb7b8" dependencies = [ "log", - "markup5ever", + "markup5ever 0.39.0", +] + +[[package]] +name = "html5ever" +version = "0.40.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "456a1a377e608e555d22ddab27ac0114bc7a7b4199078108e34c2aeae6c9b130" +dependencies = [ + "log", + "markup5ever 0.40.0", + "memchr", ] [[package]] @@ -1646,9 +1669,9 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.9" +version = "0.27.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" +checksum = "dfa8e654703247911e29c23fbeaa261834bd9bb74efba2f9acddc37bfb127f53" dependencies = [ "http 1.5.0", "hyper", @@ -1883,9 +1906,9 @@ dependencies = [ [[package]] name = "impl-more" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edaff2ce006342d4d0e00fae676f7082dada44a203560629ba18ea50a19277bb" +checksum = "30c0cddce6b7505483307994f60d97c4b156020e1504d0cf1f05a21b1b325e64" [[package]] name = "indexmap" @@ -2133,9 +2156,9 @@ dependencies = [ [[package]] name = "libredox" -version = "0.1.24" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6480ccc157a1389bb2e4891b24751b0f798ba640d22386f23143fbcc89da195a" +checksum = "61ff90caf6077a803a240f62fdbe88645a890bbca49ef8174c3cb0404362171d" dependencies = [ "libc", ] @@ -2149,7 +2172,7 @@ dependencies = [ "ahash", "bitflags", "const-str", - "cssparser", + "cssparser 0.37.0", "cssparser-color", "data-encoding", "getrandom 0.3.4", @@ -2259,9 +2282,9 @@ dependencies = [ [[package]] name = "lru-slab" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" +checksum = "4050469837a6ff301cd14c1f8f24f88549e6d548f24f64e2148eb0f72cebc51f" [[package]] name = "maplit" @@ -2277,7 +2300,18 @@ checksum = "7122d987ec5f704ee56f6e5b41a7d93722e9aae27ae07cafa4036c4d3f9757de" dependencies = [ "log", "tendril", - "web_atoms", + "web_atoms 0.2.6", +] + +[[package]] +name = "markup5ever" +version = "0.40.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ab3dc68ac4a0f5719e560136778c1ee716e296030d75dbd4484e37e39e3a842" +dependencies = [ + "log", + "tendril", + "web_atoms 0.3.0", ] [[package]] @@ -2286,8 +2320,8 @@ version = "0.39.0+unofficial" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ac010f19d6c4af81eeb4018a39d7a115de9d285af45c126a4ac02e6fc5716b7" dependencies = [ - "html5ever", - "markup5ever", + "html5ever 0.39.0", + "markup5ever 0.39.0", "tendril", "xml5ever", ] @@ -2412,7 +2446,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 3.0.5", + "syn 3.0.6", ] [[package]] @@ -2423,9 +2457,9 @@ checksum = "743fb55ba31b18fb1ecef6bdc9aa2743314978ac084044301a7eee33fb99a20d" [[package]] name = "napi" -version = "3.12.4" +version = "3.12.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d2c1d080c842ec1347ebf3cfb9347c15f8c2262f143cc30eea41ddf1c7da720" +checksum = "b7d3c1107f2fda46a7bd2676d65221b7b8160054494b38554b0e055c731714db" dependencies = [ "bitflags", "ctor", @@ -2440,15 +2474,15 @@ dependencies = [ [[package]] name = "napi-build" -version = "2.4.2" +version = "2.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "860e7c40864f95cfb83cde99f9ebadd88ef3d9bdccd7dd2cee0cc96a2dd4ffa7" +checksum = "9befcb51d87271051c0c11aaf625d09340266b7f1ac3fef5975e62274dc2813f" [[package]] name = "napi-derive" -version = "3.6.5" +version = "3.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "350057056a30368aa76c11a0d406b0aa61321710be2c36656ab4f6efe0b785a2" +checksum = "7e332e701386d8101b093203e296059ad8aeef58ddd4c75594f3c84ce637405e" dependencies = [ "convert_case 0.12.0", "ctor", @@ -2460,9 +2494,9 @@ dependencies = [ [[package]] name = "napi-derive-backend" -version = "6.1.3" +version = "6.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c1c87a71568f3fe5c736b10878ff55064b250bb4ea4b48c8055713e07b9e463" +checksum = "fd6856fe1686867da90ed0dc292d7c0c87a695eb7c578b913360f33619ee01e3" dependencies = [ "convert_case 0.12.0", "proc-macro2", @@ -2473,9 +2507,9 @@ dependencies = [ [[package]] name = "napi-sys" -version = "3.3.1" +version = "3.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d29a242104e456960e6c6479847570be731c1a92b8f8c05ddfb5439e5c09915" +checksum = "6801fc65ba4d7035636e93635e281113f00410401a237dcd4f55b1565ead2115" dependencies = [ "libloading", ] @@ -3054,7 +3088,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d05f71e01edca03d245ab0a9f7ce13a974ceb79baaae8faf2ba0b11de6b90913" dependencies = [ "bitflags", - "cssparser", + "cssparser 0.37.0", "log", "phf 0.11.3", "phf_codegen 0.11.3", @@ -3118,9 +3152,9 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pest" -version = "2.9.1" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d45aeb61b4bf818e12d4205f2466f8c4748f85f4fce0146d1c03d69d753f0ad" +checksum = "45d3aca230fad2e6f6317ca0a72724338c4960cb97168a85cdee66df4a9a21a8" dependencies = [ "memchr", "ucd-trie", @@ -3128,9 +3162,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.9.1" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89cc5a242e25ed4e7704d0be240f2cfbe20a8c27e7e252d94835be93d92dc39f" +checksum = "284b60557f2c4a2e72ad3f2d34d42685a2fa4a6a61d0d2a10c0ae2a5e916c2cf" dependencies = [ "pest", "pest_generator", @@ -3138,9 +3172,9 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.9.1" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7abf21475cc3820fe4b2ca2dc2142902f67a02189f3b5b3a229f4febc01a43e5" +checksum = "1d9d1f08a115309ee99268cf85e5228e0e56aa9caf8841ec12866b6be07c3109" dependencies = [ "pest", "pest_meta", @@ -3151,9 +3185,9 @@ dependencies = [ [[package]] name = "pest_meta" -version = "2.9.1" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adba4db388f687393c18c51348d44a41d870ca9df71a2c98172ea3035dc6936e" +checksum = "ed93ba1a9ffcca32130a5188701c81c0c49cf00d4b7c5007d5148951d743adcb" dependencies = [ "pest", ] @@ -3209,6 +3243,16 @@ dependencies = [ "phf_shared 0.13.1", ] +[[package]] +name = "phf_codegen" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41b585a510fb76fdebead6897982ef2a03a21d8e6cbcca904999742a4afc6ffe" +dependencies = [ + "phf_generator 0.14.0", + "phf_shared 0.14.0", +] + [[package]] name = "phf_generator" version = "0.11.3" @@ -3417,9 +3461,9 @@ checksum = "007d8adb5ddab6f8e3f491ac63566a7d5002cc7ed73901f72057943fa71ae1ae" [[package]] name = "quinn" -version = "0.11.11" +version = "0.11.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c1a41e437b6bbd489372cd4971de128e85c855f56c57f283d20ff016cf7c0a8" +checksum = "4051e23e9185c255a7e33ef59cdbca87a22d359052eecd22fc6b901fb37d9d11" dependencies = [ "bytes", "cfg_aliases", @@ -3437,15 +3481,15 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.17" +version = "0.11.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04759210543be93709136e28212294a659ef5001836ff4eab4d663e4529bba83" +checksum = "a9746dbde176634f4f2f1faf2404e30a31b2bc1e9cafb5329c95d8177a18c9fc" dependencies = [ "aws-lc-rs", "bytes", "getrandom 0.4.3", "lru-slab", - "rand 0.10.2", + "rand 0.10.3", "rand_pcg", "ring", "rustc-hash", @@ -3514,9 +3558,9 @@ dependencies = [ [[package]] name = "rand" -version = "0.10.2" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" +checksum = "65c9fb96cbc91e3478eaae79a69fcd3f1ae4ad052e471fe6732fff548984b4af" dependencies = [ "chacha20", "getrandom 0.4.3", @@ -3574,11 +3618,10 @@ dependencies = [ [[package]] name = "redox_users" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" +checksum = "60dc65c0ff1a7ae1294b0c67b9f14baf70b644404010370171787bfac1038fc0" dependencies = [ - "getrandom 0.2.17", "libredox", "thiserror 2.0.20", ] @@ -3689,9 +3732,9 @@ dependencies = [ [[package]] name = "rustix" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +checksum = "891efababe418670775f199f0d233d84843c227a0949a883ce15b37c78d6629d" dependencies = [ "bitflags", "errno", @@ -3702,9 +3745,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.44" +version = "0.23.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6725596c3f2c3a0aef021139e145d4eafe314a6623e4680ca83852b2c67ab2ba" +checksum = "0d41d731c7d2f962d1ccc364cec258de3c0e93b38c2fb3ba97ac74513048d634" dependencies = [ "aws-lc-rs", "log", @@ -3911,7 +3954,7 @@ checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn 3.0.5", + "syn 3.0.6", ] [[package]] @@ -3936,7 +3979,7 @@ checksum = "8d3b1629de253c70a0508c3899572da79ca359fdab27c7920ff00406df418906" dependencies = [ "proc-macro2", "quote", - "syn 3.0.5", + "syn 3.0.6", ] [[package]] @@ -4092,6 +4135,18 @@ dependencies = [ "serde", ] +[[package]] +name = "string_cache" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffa8a5dbe8b3f0bbe29d4c3225daafaeead63afdc1b65fc4c01a1384166038e6" +dependencies = [ + "new_debug_unreachable", + "parking_lot", + "phf_shared 0.14.0", + "precomputed-hash", +] + [[package]] name = "string_cache_codegen" version = "0.6.1" @@ -4104,6 +4159,18 @@ dependencies = [ "quote", ] +[[package]] +name = "string_cache_codegen" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "928dcdf75e47626b3617a976ec205d9f057584c371c1f23b782129268d0e6edc" +dependencies = [ + "phf_generator 0.14.0", + "phf_shared 0.14.0", + "proc-macro2", + "quote", +] + [[package]] name = "stringmatch" version = "0.4.0" @@ -4149,9 +4216,9 @@ dependencies = [ [[package]] name = "syn" -version = "3.0.5" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12df2e0110f65b775f769bb17ef989067a1d931b2eb822bd4346631eeada89f9" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" dependencies = [ "proc-macro2", "quote", @@ -4169,13 +4236,13 @@ dependencies = [ [[package]] name = "synstructure" -version = "0.13.2" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +checksum = "901704edd0dfe137f1987838ee4f259e4e063c31371bdb423f7ae38ec6f77f02" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.6", ] [[package]] @@ -4236,9 +4303,9 @@ dependencies = [ [[package]] name = "textwrap" -version = "0.16.3" +version = "0.16.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b81c0cb5fce14f53e49c1d4da0c508334ff12040221bb8ab01b2dabd91d04b6e" +checksum = "6ecfad6c3abc80a577f2b91c1e412ee57e7a060d430b553c1b0c940974ebcd49" dependencies = [ "icu_segmenter", "smawk", @@ -4327,7 +4394,7 @@ checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" dependencies = [ "proc-macro2", "quote", - "syn 3.0.5", + "syn 3.0.6", ] [[package]] @@ -4392,18 +4459,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cf0ded5c4e56918d8f8a339e1bb67d038d3bc6d144ac407904015ba2e4cde9b" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" +checksum = "fd3ca314f692efd6c868f8408f53fe444634a845f96c028b97d35f6a1f79f0ee" [[package]] name = "tokio" @@ -4430,7 +4488,7 @@ checksum = "78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e" dependencies = [ "proc-macro2", "quote", - "syn 3.0.5", + "syn 3.0.6", ] [[package]] @@ -4628,7 +4686,7 @@ dependencies = [ "http 1.5.0", "httparse", "log", - "rand 0.10.2", + "rand 0.10.3", "sha1", "thiserror 2.0.20", ] @@ -4668,15 +4726,15 @@ checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" [[package]] name = "unicode-id-start" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81b79ad29b5e19de4260020f8919b443b2ef0277d242ce532ec7b7a2cc8b6007" +checksum = "0825d2e09dcae814a4273c1e1435979d414ede25b2ee235b1545da6682483765" [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "unicode-segmentation" @@ -4865,7 +4923,7 @@ dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 3.0.5", + "syn 3.0.6", "wasm-bindgen-shared", ] @@ -4919,8 +4977,20 @@ checksum = "ba8b815c1b593dc0baf78dd0f4fc8fdb2de53198fb1163738093e9a311c33fb3" dependencies = [ "phf 0.13.1", "phf_codegen 0.13.1", - "string_cache", - "string_cache_codegen", + "string_cache 0.9.0", + "string_cache_codegen 0.6.1", +] + +[[package]] +name = "web_atoms" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7572660c8890448ba236b7376f27e389c6a7e1c70195622faced601f855c0ada" +dependencies = [ + "phf 0.14.0", + "phf_codegen 0.14.0", + "string_cache 0.11.0", + "string_cache_codegen 0.11.2", ] [[package]] @@ -5340,7 +5410,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ab627f34ff61b80d756180d556f9c68801d836d271b3b8c094504ceca69d221" dependencies = [ "log", - "markup5ever", + "markup5ever 0.39.0", ] [[package]] @@ -5362,13 +5432,13 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" +checksum = "33811428bee40dbceb6d545e95754741d17a6aef9a4849f0fd62e2ba4f412a78" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.6", "synstructure", ] @@ -5403,13 +5473,13 @@ dependencies = [ [[package]] name = "zerofrom-derive" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" +checksum = "f75b4683f6c7f45248d4d64056a24298c6281e0993356d7d1b4a1a962ef10d4a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.6", "synstructure", ] @@ -5451,7 +5521,7 @@ checksum = "34df6fc39dbd26ddc9c10e6a2984476e13acce22e64e4487636ef494369225da" dependencies = [ "proc-macro2", "quote", - "syn 3.0.5", + "syn 3.0.6", ] [[package]] @@ -5470,9 +5540,9 @@ dependencies = [ [[package]] name = "zlib-rs" -version = "0.6.7" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34b31d188d9d685a4f9c7b46d6e36631b07058d2cfe190267adce54dc230bf12" +checksum = "b268e58e7c693d7c271f93ffc4ba3b380412554231c85bf61ca7af91042a4112" [[package]] name = "zmij" diff --git a/Cargo.toml b/Cargo.toml index 97e2e671..aeae9799 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -64,7 +64,7 @@ homepage = "https://codechat-editor.onrender.com/fw/fsb/opt/render/project/src/R keywords = ["literate programming"] license = "GPL-3.0-only" repository = "https://github.com/bjones1/CodeChat_Editor" -version = "0.2.4" +version = "0.2.5" # Shared dependencies # ------------------- diff --git a/CodeChat Editor.code-workspace b/CodeChat Editor.code-workspace new file mode 100644 index 00000000..cc7a3de9 --- /dev/null +++ b/CodeChat Editor.code-workspace @@ -0,0 +1,10 @@ +{ + "folders": [ + { + "path": "." + }, + { + "path": "extensions/VSCode" + } +] +} diff --git a/README.md b/README.md index 4699e03b..047b884e 100644 --- a/README.md +++ b/README.md @@ -39,51 +39,6 @@ depending on context (code block or dock block). In a code block, press Esc then press tab/shift-tab to navigate. In a doc block, tab alone navigates; to view all doc block keyboard shortcuts press Alt+0 (Windows, Linux) or ⌥0 (MacOS). -Research capture ----------------- - -The VS Code extension can record dissertation study capture events when a -participant explicitly opts in. A participant first registers in the capture -portal, which emails a capture token. In VS Code, run **Manage CodeChat Editor -Capture** or **CodeChat Editor: Enter Capture Token** from the command palette, -paste the token, then turn on consent and recording from the same capture -manager. - -For detailed student/tester setup steps, see the -[CodeChat Capture Token Setup Guide](docs/capture-token-setup-guide.html). - -The token is imported through the VS Code UI and persisted only in VS Code -SecretStorage. It is never written to workspace settings, repository files, or a -JSON configuration file. The extension asks CaptureWebService for token status; -the status item and capture manager show whether the token is accepted, -rejected, unavailable, or disabled by the portal. The participant ID used in -events comes from that status response, not from the token text. - -CodeChat no longer connects directly to the remote capture database and no -longer reads or stores database credentials. The old local JSON database-secret -configuration path has been removed. Capture events now leave CodeChat only by -calling CaptureWebService with the portal-issued bearer token; any database -writer role remains inside the service deployment. - -Events are sanitized, written to a durable local FIFO spool in VS Code's global -extension storage, then uploaded to CaptureWebService. Spooled events carry only -a non-secret token hash/service identity so events from an old token are not -uploaded under a new token. Offline recording is allowed only after the same -token and service URL have previously been verified as capture-enabled; a token -disabled by the portal remains disabled while the service is unavailable. If the -network or service is unavailable after the token has been accepted at least -once, queued events remain in the spool and upload as soon as the matching token -and service are available again. The capture service endpoint can be changed in -the user-level `CodeChatEditor.Capture.ServiceBaseUrl` setting; workspace values -are ignored for this token-bearing endpoint. Token-bearing requests require -HTTPS except for localhost development endpoints. - -Developer builds must keep the Rust `minreq` dependency compiled with -`https-rustls-probe` and `proxy` support. Capture HTTPS requests validate with -the host platform certificate store and honor standard proxy environment -variables. Without HTTPS support, token validation and event upload to the AWS -capture service report as unavailable even when the service itself is healthy. - Structure --------- @@ -164,6 +119,9 @@ cross-reference. For example: | `[Style guide](#cc-nNZ6Gs2uWD)` | [Style guide](#cc-nNZ6Gs2uWD) | | `` | | +Alpha feature: first view the [style guide](docs/style_guide.cpp) to make the +link above work. Opening the link doesn't (yet) work. + In projects, each id must be unique throughout the entire project. To simplify the creation of unique ids, items assigned an `id="*"` with be replaced with a unique id, such as `id=cc-DscjSxRZHF`. This autogenerated id isn't automatically @@ -197,6 +155,10 @@ To do so: Starting websocket ID +Alpha feature: first view [webserver.rs](server/src/webserver.rs) and +[CodeChatEditorFramework.mts](client/src/CodeChatEditorFramework.mts). Opening +the link doesn't (yet) work. + Images ------ @@ -326,37 +288,9 @@ Research capture ---------------- The VS Code extension can record dissertation study capture events when a -participant explicitly opts in. A participant first registers in the capture -portal, which emails a capture token. In VS Code, run **Manage CodeChat Editor -Capture** or **CodeChat Editor: Enter Capture Token** from the command palette, -paste the token, then turn on consent and recording from the same capture -manager. - -The token is imported through the VS Code UI and persisted only in VS Code -SecretStorage. It is never written to workspace settings, repository files, or a -JSON configuration file. The extension asks CaptureWebService for token status; -the status item and capture manager show whether the token is accepted, -rejected, unavailable, or disabled by the portal. The participant ID used in -events comes from that status response, not from the token text. - -CodeChat no longer connects directly to the remote capture database and no -longer reads or stores database credentials. The old local JSON database-secret -configuration path has been removed. Capture events now leave CodeChat only by -calling CaptureWebService with the portal-issued bearer token; any database -writer role remains inside the service deployment. - -Events are sanitized, written to a durable local FIFO spool in VS Code's global -extension storage, then uploaded to CaptureWebService. Spooled events carry only -a non-secret token hash/service identity so events from an old token are not -uploaded under a new token. Offline recording is allowed only after the same -token and service URL have previously been verified as capture-enabled; a token -disabled by the portal remains disabled while the service is unavailable. If the -network or service is unavailable after the token has been accepted at least -once, queued events remain in the spool and upload as soon as the matching token -and service are available again. The capture service endpoint can be changed in -the user-level `CodeChatEditor.Capture.ServiceBaseUrl` setting; workspace values -are ignored for this token-bearing endpoint. Token-bearing requests require -HTTPS except for localhost development endpoints. +participant explicitly opts in. See the +[capture token setup guide](capture-token-setup-guide.html) for more +information. Supported languages --------------------------------------------------- @@ -410,8 +344,8 @@ You should have received a [copy](LICENSE.html) of the GNU General Public License along with the CodeChat Editor. If not, see [https://www.gnu.org/licenses/](https://www.gnu.org/licenses/). -Notes ------------------------------------------------ +Notes +----------------------- 1. The image used comes from [Monitor icons created by prettycons - Flaticon](https://www.flaticon.com/free-icons/monitor "monitor icons"). diff --git a/builder/Cargo.lock b/builder/Cargo.lock index 9842dab9..73b3f890 100644 --- a/builder/Cargo.lock +++ b/builder/Cargo.lock @@ -93,15 +93,15 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "clap" -version = "4.6.6" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "473c7e07f409a8d772161724aa8db6a765a2532a70f9667eeb7b49d3d02fbdca" +checksum = "aa8876b300ab35ba921adea3dfd70157a46249b33f95c9084ae5709785478946" dependencies = [ "clap_builder", "clap_derive", @@ -109,9 +109,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.6.6" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b48fea5a88e9ae728a2dcbedbfc0e730f7d60da42e1cb049a83c9fb8b789889" +checksum = "ec0797fb7aeb1406c84efac526901f7ec3ead2124f946b494e72879d4b54704d" dependencies = [ "anstream", "anstyle", @@ -121,27 +121,27 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.6.4" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d012d2b9d65aca7f18f4d9878a045bc17899bba951561ba5ec3c2ba1eed9a061" +checksum = "f9c751b79415d4e559e3d1fcf128e09e720eb673a06d26cf6f392d37d75b66e0" dependencies = [ "heck", "proc-macro2", "quote", - "syn 3.0.5", + "syn 3.0.6", ] [[package]] name = "clap_lex" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" +checksum = "1c133bc6a41be0d194c306b5506d15e6feeea7b1d6604bd3f8310dfb2ca96486" [[package]] name = "cmd_lib" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e1ac603509ec7e9696f35e836365c53f305040b1080dabcde26e00e58b264a7" +checksum = "dc93f60133215cad2ef47e47db5a386c78874a2630c2c2be68f0f543b3ce0c2c" dependencies = [ "cmd_lib_macros", "env_logger", @@ -152,11 +152,10 @@ dependencies = [ [[package]] name = "cmd_lib_macros" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f213802401c6631f4ff5b3bfc40f07f01a431c53d736ab42a6d0d65be3e0266" +checksum = "bd39b5c2657c1a0064aa5d73636dac4a217edeeb6c5f8a5f52c123a758462ece" dependencies = [ - "proc-macro-error2", "proc-macro2", "quote", "syn 2.0.119", @@ -371,28 +370,6 @@ dependencies = [ "portable-atomic", ] -[[package]] -name = "proc-macro-error-attr2" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" -dependencies = [ - "proc-macro2", - "quote", -] - -[[package]] -name = "proc-macro-error2" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" -dependencies = [ - "proc-macro-error-attr2", - "proc-macro2", - "quote", - "syn 2.0.119", -] - [[package]] name = "proc-macro2" version = "1.0.107" @@ -463,7 +440,7 @@ checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn 3.0.5", + "syn 3.0.6", ] [[package]] @@ -485,9 +462,9 @@ dependencies = [ [[package]] name = "syn" -version = "3.0.5" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12df2e0110f65b775f769bb17ef989067a1d931b2eb822bd4346631eeada89f9" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" dependencies = [ "proc-macro2", "quote", @@ -511,14 +488,14 @@ checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" dependencies = [ "proc-macro2", "quote", - "syn 3.0.5", + "syn 3.0.6", ] [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "unicode-width" diff --git a/builder/src/main.rs b/builder/src/main.rs index 98cc65c4..263be2d0 100644 --- a/builder/src/main.rs +++ b/builder/src/main.rs @@ -383,7 +383,7 @@ fn patch_client_libs() -> io::Result<()> { fn run_install(dev: bool) -> io::Result<()> { if dev { - run_script("npm", &["install", "-g", "pnpm@latest-10"], ".", true)?; + run_script("npm", &["install", "-g", "pnpm@latest-11"], ".", true)?; } // See [the client manifest](../../client/package.json5) for an explanation // of `--no-frozen-lockfile`. @@ -724,8 +724,21 @@ fn run_extensions_build( let esbuild = PathBuf::from_slash("node_modules/.bin/esbuild"); let distflag = if dist { "--minify" } else { "--sourcemap" }; - // The NAPI build. - let mut napi_args = vec!["napi", "build", "--platform", "--output-dir", "src"]; + // The NAPI build. `--js` aims the generated loader at + // `src/index-generated.js` instead of its default `src/index.js`, which + // is a tracked file carrying hand-written load tracing. The generated + // loader is therefore unused at run time; it's kept, and ignored by Git, + // as the reference to re-derive `src/index.js` from after a NAPI-RS + // upgrade changes what NAPI-RS emits. + let mut napi_args = vec![ + "napi", + "build", + "--platform", + "--output-dir", + "src", + "--js", + "index-generated.js", + ]; if dist { napi_args.push("--release"); } diff --git a/client/package.json5 b/client/package.json5 index cfbd6baf..20676dfc 100644 --- a/client/package.json5 +++ b/client/package.json5 @@ -45,7 +45,7 @@ type: 'module', version: '0.2.4', dependencies: { - '@codemirror/commands': '^6.11.0', + '@codemirror/commands': '^6.11.1', '@codemirror/lang-cpp': '^6.0.3', '@codemirror/lang-css': '^6.3.1', '@codemirror/lang-go': '^6.0.1', @@ -53,18 +53,16 @@ '@codemirror/lang-java': '^6.0.2', '@codemirror/lang-javascript': '^6.2.5', '@codemirror/lang-json': '^6.0.2', - '@codemirror/lang-markdown': '^6.5.2', - '@codemirror/lang-php': '^6.0.2', '@codemirror/lang-python': '^6.2.1', '@codemirror/lang-rust': '^6.0.2', '@codemirror/lang-sql': '^6.10.0', - '@codemirror/lang-xml': '^6.1.0', '@codemirror/lang-yaml': '^6.1.3', '@codemirror/language': '^6.12.4', '@codemirror/legacy-modes': '^6.5.4', - '@codemirror/state': '^6.7.4', - '@codemirror/view': '^6.43.11', - '@hpcc-js/wasm-graphviz': '^1.29.0', + '@codemirror/lint': '^6.9.7', + '@codemirror/state': '^6.7.5', + '@codemirror/view': '^6.43.12', + '@hpcc-js/wasm-graphviz': '^1.29.1', '@mathjax/mathjax-newcm-font': '^4.1.3', codemirror: '^6.0.2', mathjax: '^4.1.3', @@ -77,10 +75,8 @@ '@eslint/css': '^2.0.0', '@eslint/js': '^10.0.1', '@types/chai': '^5.2.3', - '@types/dom-navigation': '^1.0.7', - '@types/js-beautify': '^1.14.3', '@types/mocha': '^10.0.10', - '@types/node': '^26.5.1', + '@types/node': '^26.6.2', '@types/toastify-js': '^1.12.4', '@typescript-eslint/eslint-plugin': '^8.70.0', '@typescript-eslint/parser': '^8.70.0', @@ -90,14 +86,14 @@ 'axe-core': '^4.13.0', chai: '^6.2.2', esbuild: '^0.28.2', - eslint: '^10.10.0', + eslint: '^10.11.0', 'eslint-config-prettier': '^10.1.8', 'eslint-plugin-import': '^2.32.0', 'eslint-plugin-prettier': '^5.5.6', globals: '^17.12.0', - mocha: '^12.0.1', + mocha: '^12.0.2', 'npm-check-updates': '^23.1.0', - prettier: '^3.9.6', + prettier: '^3.9.8', /* Typescript 7 support for eslint is blocked per [this issue](https://github.com/typescript-eslint/typescript-eslint/issues/10940). Instead, see diff --git a/client/pnpm-lock.yaml b/client/pnpm-lock.yaml index a4c890b1..af2f30b5 100644 --- a/client/pnpm-lock.yaml +++ b/client/pnpm-lock.yaml @@ -9,8 +9,8 @@ importers: .: dependencies: '@codemirror/commands': - specifier: ^6.11.0 - version: 6.11.0 + specifier: ^6.11.1 + version: 6.11.1 '@codemirror/lang-cpp': specifier: ^6.0.3 version: 6.0.3 @@ -32,12 +32,6 @@ importers: '@codemirror/lang-json': specifier: ^6.0.2 version: 6.0.2 - '@codemirror/lang-markdown': - specifier: ^6.5.2 - version: 6.5.2 - '@codemirror/lang-php': - specifier: ^6.0.2 - version: 6.0.2 '@codemirror/lang-python': specifier: ^6.2.1 version: 6.2.1 @@ -47,9 +41,6 @@ importers: '@codemirror/lang-sql': specifier: ^6.10.0 version: 6.10.0 - '@codemirror/lang-xml': - specifier: ^6.1.0 - version: 6.1.0 '@codemirror/lang-yaml': specifier: ^6.1.3 version: 6.1.3 @@ -59,15 +50,18 @@ importers: '@codemirror/legacy-modes': specifier: ^6.5.4 version: 6.5.4 + '@codemirror/lint': + specifier: ^6.9.7 + version: 6.9.7 '@codemirror/state': - specifier: ^6.7.4 - version: 6.7.4 + specifier: ^6.7.5 + version: 6.7.5 '@codemirror/view': - specifier: ^6.43.11 - version: 6.43.11 + specifier: ^6.43.12 + version: 6.43.12 '@hpcc-js/wasm-graphviz': - specifier: ^1.29.0 - version: 1.29.0 + specifier: ^1.29.1 + version: 1.29.1 '@mathjax/mathjax-newcm-font': specifier: ^4.1.3 version: 4.1.3 @@ -95,31 +89,25 @@ importers: version: 2.0.0 '@eslint/js': specifier: ^10.0.1 - version: 10.0.1(eslint@10.10.0(supports-color@8.1.1)) + version: 10.0.1(eslint@10.11.0(supports-color@8.1.1)) '@types/chai': specifier: ^5.2.3 version: 5.2.3 - '@types/dom-navigation': - specifier: ^1.0.7 - version: 1.0.7 - '@types/js-beautify': - specifier: ^1.14.3 - version: 1.14.3 '@types/mocha': specifier: ^10.0.10 version: 10.0.10 '@types/node': - specifier: ^26.5.1 - version: 26.5.1 + specifier: ^26.6.2 + version: 26.6.2 '@types/toastify-js': specifier: ^1.12.4 version: 1.12.4 '@typescript-eslint/eslint-plugin': specifier: ^8.70.0 - version: 8.70.0(@typescript-eslint/parser@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@8.1.1))(supports-color@8.1.1))(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@8.1.1))(supports-color@8.1.1) + version: 8.70.0(@typescript-eslint/parser@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.11.0(supports-color@8.1.1))(supports-color@8.1.1))(@typescript/typescript6@6.0.2)(eslint@10.11.0(supports-color@8.1.1))(supports-color@8.1.1) '@typescript-eslint/parser': specifier: ^8.70.0 - version: 8.70.0(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@8.1.1))(supports-color@8.1.1) + version: 8.70.0(@typescript/typescript6@6.0.2)(eslint@10.11.0(supports-color@8.1.1))(supports-color@8.1.1) '@typescript/native': specifier: npm:typescript@^7.0.2 version: typescript@7.0.2 @@ -133,40 +121,40 @@ importers: specifier: ^0.28.2 version: 0.28.2 eslint: - specifier: ^10.10.0 - version: 10.10.0(supports-color@8.1.1) + specifier: ^10.11.0 + version: 10.11.0(supports-color@8.1.1) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@10.10.0(supports-color@8.1.1)) + version: 10.1.8(eslint@10.11.0(supports-color@8.1.1)) eslint-plugin-import: specifier: ^2.32.0 - version: 2.32.0(@typescript-eslint/parser@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@8.1.1))(supports-color@8.1.1))(eslint@10.10.0(supports-color@8.1.1))(supports-color@8.1.1) + version: 2.32.0(@typescript-eslint/parser@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.11.0(supports-color@8.1.1))(supports-color@8.1.1))(eslint@10.11.0(supports-color@8.1.1))(supports-color@8.1.1) eslint-plugin-prettier: specifier: ^5.5.6 - version: 5.5.6(eslint-config-prettier@10.1.8(eslint@10.10.0(supports-color@8.1.1)))(eslint@10.10.0(supports-color@8.1.1))(prettier@3.9.6) + version: 5.5.6(eslint-config-prettier@10.1.8(eslint@10.11.0(supports-color@8.1.1)))(eslint@10.11.0(supports-color@8.1.1))(prettier@3.9.8) globals: specifier: ^17.12.0 version: 17.12.0 mocha: - specifier: ^12.0.1 - version: 12.0.1 + specifier: ^12.0.2 + version: 12.0.2 npm-check-updates: specifier: ^23.1.0 version: 23.1.0 prettier: - specifier: ^3.9.6 - version: 3.9.6 + specifier: ^3.9.8 + version: 3.9.8 typescript: specifier: npm:@typescript/typescript6@^6.0.2 version: '@typescript/typescript6@6.0.2' typescript-eslint: specifier: ^8.70.0 - version: 8.70.0(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@8.1.1))(supports-color@8.1.1) + version: 8.70.0(@typescript/typescript6@6.0.2)(eslint@10.11.0(supports-color@8.1.1))(supports-color@8.1.1) packages: - '@antfu/install-pkg@2.0.1': - resolution: {integrity: sha512-iCKVQcIC0e3oDxEfs3SHQGW+ovhBMZmS1TE+bTk50rVyMCBmCfClv7Qi3HQKlumYwvjb/iIMeWCW2i67q6kFfQ==} + '@antfu/install-pkg@2.1.0': + resolution: {integrity: sha512-sdg9NxU3zR4Mnawfbc/x6GB5Wf17WYud5qOuEuxXjaKpYpMkISSJEjItGebXJ2bQ4DIcly4NYH23mtkGJjvKUw==} '@braintree/sanitize-url@7.1.2': resolution: {integrity: sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA==} @@ -183,8 +171,8 @@ packages: '@codemirror/autocomplete@6.20.3': resolution: {integrity: sha512-tlosUqb+3BbxCxZdu4tKeRghPFC+QM7q4X5YhKV2eCmPG+1r2F3f4AaSz5sCrFqUtX4Jh20VFTKecl16MgiV9g==} - '@codemirror/commands@6.11.0': - resolution: {integrity: sha512-/K4Rl5BN0OtTiPWmJCdqODu38XnDMsDxKY5rgrPnCkutPTJf2wVbkoixLfealF5Kwse/s8P8M5jAiURiwSwnFA==} + '@codemirror/commands@6.11.1': + resolution: {integrity: sha512-O/4hG3SC1YwcmQ0d2UVNDs+AsaNWd1iHVxbTeEBuqH+6bExAiPK3iS/BvpY6rZGURALv4ZD3sIgcCmRvw3ehBg==} '@codemirror/lang-cpp@6.0.3': resolution: {integrity: sha512-URM26M3vunFFn9/sm6rzqrBzDgfWuDixp85uTY49wKudToc2jTHUrKIGGKs+QWND+YLofNNZpxcNGRynFJfvgA==} @@ -207,12 +195,6 @@ packages: '@codemirror/lang-json@6.0.2': resolution: {integrity: sha512-x2OtO+AvwEHrEwR0FyyPtfDUiloG3rnVTSZV1W8UteaLL8/MajQd8DpvUb2YVzC+/T18aSDv0H9mu+xw0EStoQ==} - '@codemirror/lang-markdown@6.5.2': - resolution: {integrity: sha512-AwBOdkWYuA//WcM0xO5PfHPUcmz/O2i5o0Nsg1U69SII/loCJlFI1Romd9xp2HYb1kYJRGZotyqRghuHH5n8Kw==} - - '@codemirror/lang-php@6.0.2': - resolution: {integrity: sha512-ZKy2v1n8Fc8oEXj0Th0PUMXzQJ0AIR6TaZU+PbDHExFwdu+guzOA4jmCHS1Nz4vbFezwD7LyBdDnddSJeScMCA==} - '@codemirror/lang-python@6.2.1': resolution: {integrity: sha512-IRjC8RUBhn9mGR9ywecNhB51yePWCGgvHfY1lWN/Mrp3cKuHr0isDKia+9HnvhiWNnMpbGhWrkhuWOc09exRyw==} @@ -222,9 +204,6 @@ packages: '@codemirror/lang-sql@6.10.0': resolution: {integrity: sha512-6ayPkEd/yRw0XKBx5uAiToSgGECo/GY2NoJIHXIIQh1EVwLuKoU8BP/qK0qH5NLXAbtJRLuT73hx7P9X34iO4w==} - '@codemirror/lang-xml@6.1.0': - resolution: {integrity: sha512-3z0blhicHLfwi2UgkZYRPioSgVTo9PV5GP5ducFH6FaHy0IAJRg+ixj5gTR1gnT/glAIC8xv4w2VL1LoZfs+Jg==} - '@codemirror/lang-yaml@6.1.3': resolution: {integrity: sha512-AZ8DJBuXGVHybpBQhmZtgew5//4hv3tdkXnr3vDmOUMJRuB6vn/uuwtmTOTlqEaQFg3hQSVeA90NmvIQyUV6FQ==} @@ -240,11 +219,11 @@ packages: '@codemirror/search@6.7.2': resolution: {integrity: sha512-gUYkYhT2+n/+VGZ+8EzE5WFkYZUZYm1VOKDudIsNqh42uRVQJ0a6Yss9sdKT3MeOYfuL1N6AZA57oza0Oyr0LA==} - '@codemirror/state@6.7.4': - resolution: {integrity: sha512-QhQIVRY+xHZDxwOSFrJ1eUMapJBUID3IdeAjf7dHO7zBUzSkyooHiodnalz5MG3iHzwixKMlAAyn7244y537EA==} + '@codemirror/state@6.7.5': + resolution: {integrity: sha512-QjLbZmY1Au3JiRrDVYFLRD0BZ3SOKS9pR3yjIkd7u27YY8TFD9/Q9fhPnLV5l1mHFSo3hHU/N31vpwEJOx4owQ==} - '@codemirror/view@6.43.11': - resolution: {integrity: sha512-2+esucbQX6wB2JYi1eDvdCPFTA31BN8oSy6xCmk3G6CloV11yOvEjYk+gH7kLrP0MuHG94E8WDhjs5oMiu3+Wg==} + '@codemirror/view@6.43.12': + resolution: {integrity: sha512-Nv0vxQ19NAqvB/c2pFzjIzFlzzJl7jmdtNkwOwGbn0Ks9mFAzibvumz7cQem5cRsFA2cEw2fg+uHZGbcHupLQQ==} '@esbuild/aix-ppc64@0.28.2': resolution: {integrity: sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==} @@ -424,8 +403,8 @@ packages: resolution: {integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/css-tree@4.1.0': - resolution: {integrity: sha512-cg0ohyrAG3swyGqt8t1K/OK97DqBw/ftDvlvyY1fmEst5B40UOmsimwLENq74z2dyw5CDM+3zJIW+CV2nFNDdA==} + '@eslint/css-tree@4.1.1': + resolution: {integrity: sha512-A+s89eP+yDAPkKjnIOfjlkGifg5J7GPn01nWx14UjBVWktfkxOU4975F9ZZ13xNxkGiblNcBaAqgKhnQrW6SWA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@eslint/css@2.0.0': @@ -449,8 +428,8 @@ packages: resolution: {integrity: sha512-IkO+/KEUvwbVpiURZg+P7zF74z5Jxe0UgJxVni+RtoHQ6IZieXaO02kmadomap/q+l6bc/jdPGGqTjhuZnuz1Q==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@hpcc-js/wasm-graphviz@1.29.0': - resolution: {integrity: sha512-irr5OCt1G5s5j75jlGZm3Y5fb6DboE2c/aWiM/Fv/b3NygbJY/Rp8335kS5Qeklsib0dWInjAYCj4UEClIYQmQ==} + '@hpcc-js/wasm-graphviz@1.29.1': + resolution: {integrity: sha512-koAQL0wlryEMeBs4/cQC3GB5ziITv66gR9DU/SWYjjup+iQ+Nbjcqxeaef+sffN4F4cBYZ3P31B5z7+cbSABbw==} '@humanfs/core@0.19.2': resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} @@ -508,8 +487,8 @@ packages: '@lezer/java@1.1.4': resolution: {integrity: sha512-gQylJ2xHV2xXsVqtnAcJrcROvLZJaQiC0tR//+q0k961BxqvyYttusPkJ8d9T1fPDJKHJW2etUH8XbIn9jhVUg==} - '@lezer/javascript@1.5.4': - resolution: {integrity: sha512-vvYx3MhWqeZtGPwDStM2dwgljd5smolYD2lR2UyFcHfxbBQebqx8yjmFmxtJ/E6nN6u1D9srOiVWm3Rb4tmcUA==} + '@lezer/javascript@1.5.5': + resolution: {integrity: sha512-sWg4yX1J6XW67AaAynVt0iwF0M5c+np36TEu+P2ifAJ8haRYvHnWDV28r1jdwnJehWCwXECutAUy56K4RBZIyg==} '@lezer/json@1.0.3': resolution: {integrity: sha512-BP9KzdF9Y35PDpv04r0VeSTKDeox5vVr3efE7eBbx3r4s3oNLfunchejZhjArmeieBH+nVOpgIiBJpEAv8ilqQ==} @@ -517,20 +496,11 @@ packages: '@lezer/lr@1.4.10': resolution: {integrity: sha512-rnCpTIBafOx4mRp43xOxDJbFipJm/c0cia/V5TiGlhmMa+wsSdoGmUN3w5Bqrks/09Q/D4tNAmWaT8p6NRi77A==} - '@lezer/markdown@1.7.2': - resolution: {integrity: sha512-iTkYvoVcKt3WkeL7qUDyXHONZEwLio4wj8KTNi2dnjQEXBZKMV63BpQrPqfsM+OkvuRbiSTAcycYAsQzLhRNoQ==} - - '@lezer/php@1.0.6': - resolution: {integrity: sha512-QJ2xNXPmsm/Z3IpThq8fnJrEIVpxhsIoj6GZBW0JYEd/l9zxpJZW216X4fzqQY4vgpdGIumypvI4uQjd4tnYtw==} - '@lezer/python@1.1.19': resolution: {integrity: sha512-MhQIURHRytsNzP/YXnqpYKW6la6voAH3kyplTOOiCdjyFY6cWWGFVmYVdHIPrElqSDf4iCDktQCockB9FxuhzQ==} - '@lezer/rust@1.0.2': - resolution: {integrity: sha512-Lz5sIPBdF2FUXcWeCu1//ojFAZqzTQNRga0aYv6dYXqJqPfMdCAI0NzajWUd4Xijj1IKJLtjoXRPMvTKWBcqKg==} - - '@lezer/xml@1.0.6': - resolution: {integrity: sha512-CdDwirL0OEaStFue/66ZmFSeppuL6Dwjlk8qk153mSQwiSH/Dlri4GNymrNWnUmPl2Um7QfV1FO9KFUyX3Twww==} + '@lezer/rust@1.0.3': + resolution: {integrity: sha512-XxErOjZzQ7yJt1agUT4fu9qQvESZ3acgoxpPaPTPOiUx+duCjaVAtZGFIgphkHxlN05djdVAIOy/wItShMEjqQ==} '@lezer/yaml@1.0.4': resolution: {integrity: sha512-2lrrHqxalACEbxIbsjhqGpSW8kWpUKuY6RHgnSAFZa6qK62wvnPxA8hGOwOoDbwHcOFs5M4o27mjGu+P7TvBmw==} @@ -698,8 +668,8 @@ packages: '@types/d3-scale@4.0.9': resolution: {integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==} - '@types/d3-selection@3.0.11': - resolution: {integrity: sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==} + '@types/d3-selection@3.0.12': + resolution: {integrity: sha512-Qe/KWYhEiIIxGs7HrAAjMfShxKldx19SJtr5zu53f3afPsdZNz7HHtdTLXo/kqeiWNXVycI24kSnfzBYkTzpgw==} '@types/d3-shape@3.2.0': resolution: {integrity: sha512-kVd74ta9eof3eJOvbNd1vGKS/XERRyQbT26Og63hIsvDO84cjD5gEOhsXf26w3FSoNlPVz84DOFcKv/oou+fMw==} @@ -725,9 +695,6 @@ packages: '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} - '@types/dom-navigation@1.0.7': - resolution: {integrity: sha512-Di4W+i2faYquHUnyWUg3bBQp5pTNvjDDA7mIYfD/1WlLgan6sKkeVjGbdL78K0CuNEk5Pfc/c0rfelwkz10mnQ==} - '@types/esrecurse@4.3.1': resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} @@ -737,9 +704,6 @@ packages: '@types/geojson@7946.0.16': resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} - '@types/js-beautify@1.14.3': - resolution: {integrity: sha512-FMbQHz+qd9DoGvgLHxeqqVPaNRffpIu5ZjozwV8hf9JAGpIOzuAf4wGbRSo8LNITHqGjmmVjaMggTT5P4v4IHg==} - '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -749,8 +713,8 @@ packages: '@types/mocha@10.0.10': resolution: {integrity: sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==} - '@types/node@26.5.1': - resolution: {integrity: sha512-CzNm2FezW4VR/LjG6yUdiEgLE/rAQ9Slj5gCu/C2VrdcW7I0ahNZ8DRbHT7zOZ6r3ONgd/bsQIeSaoDGrd1C6g==} + '@types/node@26.6.2': + resolution: {integrity: sha512-X1P21scMv4zGKLYqjdGjaKa7COa0RKVYYZZN/NfvLQ1JegxFhdhpZG/Lyn8AXx6CDUavKAd11v6BvfpkDByK8g==} '@types/toastify-js@1.12.4': resolution: {integrity: sha512-zfZHU4tKffPCnZRe7pjv/eFKzTVHozKewFCKaCjZ4gFinKgJRz/t0bkZiMCXJxPhv/ZoeDGNOeRD09R0kQZ/nw==} @@ -1007,11 +971,11 @@ packages: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} - brace-expansion@1.1.18: - resolution: {integrity: sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==} + brace-expansion@1.1.21: + resolution: {integrity: sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==} - brace-expansion@5.0.9: - resolution: {integrity: sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==} + brace-expansion@5.0.12: + resolution: {integrity: sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==} engines: {node: 20 || >=22} browser-stdout@1.3.1: @@ -1394,8 +1358,8 @@ packages: resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@10.10.0: - resolution: {integrity: sha512-NPXn6r5zl4uET1DAVPaOwzX3rut4c0wcmw3dWJAfOsTM5+TogXo0DDjz8pwm/hL8cyVNpHqeK4JpN0NjnyFFNw==} + eslint@10.11.0: + resolution: {integrity: sha512-P7a6UEEqb9G95MYAtqkmsTbVXIYyzIfl6NGOIJk162PaahFxFyeGcrlXYFSiagECg4sEm8IseJdZBKR3rx6MsQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: @@ -1451,14 +1415,14 @@ packages: file-entry-cache@11.1.5: resolution: {integrity: sha512-+PFTHITI08JIGhnNpGNI8T8inUpgZfk3GNEqfT9R2zZV2iFXg3CvqzSl/uEhs7TSGujYRELEANyDvS8Fj7+S7Q==} + find-up-simple@1.0.1: + resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} + engines: {node: '>=18'} + find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} - find-up@8.0.0: - resolution: {integrity: sha512-JGG8pvDi2C+JxidYdIwQDyS/CgcrIdh18cvgxcBge3wSHRQOrooMD3GlFBcmMJAN9M42SAZjDp5zv1dglJjwww==} - engines: {node: '>=20'} - flat-cache@6.1.23: resolution: {integrity: sha512-f++BY9pTk+983xK1FLzlLpmM0i0z+jHmx3QESGkURMXujQZz1k5wzwX6hjnQ8goaD0B+sYnDK1yZ6MTyZfUaqA==} @@ -1605,8 +1569,8 @@ packages: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - is-core-module@2.16.2: - resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==} + is-core-module@2.17.0: + resolution: {integrity: sha512-J/vG0zBCbIKOQFfufSwyXdMrsohyJIUNkrnmo6WZGzoM7tr/lsbfW5b2BvisL6zsyMzK9UxV9L6c7AoFbyXHOA==} engines: {node: '>= 0.4'} is-data-view@1.0.2: @@ -1699,8 +1663,8 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - js-yaml@5.4.1: - resolution: {integrity: sha512-28R/k+NAjeuf7+CKlTxWZVExJGwVVLwY06DgEnOMz2gEpfNkDcD7QvyiVPT0xy0XXhU8vHsd4Ot42OOPdJG7dQ==} + js-yaml@5.4.2: + resolution: {integrity: sha512-m+aqu+LwO1O6sIopafj8HUVl5aawITwZQe/yHpMCKjaWBaA/d07B/QdMb3529REftiU+RMMHL3Vlsw3hON7vWg==} hasBin: true json-schema-traverse@0.4.1: @@ -1737,15 +1701,11 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} - locate-path@8.0.0: - resolution: {integrity: sha512-XT9ewWAC43tiAV7xDAPflMkG0qOPn2QjHqlgX8FOqmWa/rxnyYDulF9T0F7tRy1u+TVTmK/M//6VIOye+2zDXg==} - engines: {node: '>=20'} - lodash-es@4.18.1: resolution: {integrity: sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==} - lru-cache@11.5.2: - resolution: {integrity: sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==} + lru-cache@11.5.3: + resolution: {integrity: sha512-U4N8FgzmWxc8k1VH8Kr6lQg18U7Fjvby6wXHVRX/ZZ7IwWbRMgrRbP0Wrb5q5NVinryp4SQampHKdvtecItxUg==} engines: {node: 20 || >=22} marked@16.4.2: @@ -1760,8 +1720,8 @@ packages: mathjax@4.1.3: resolution: {integrity: sha512-BN/8Pkgn7G1pIDYJqd9md+JHsE/jydSYbyOZnSdSA0WziuVO8mRxdYiWFumkVVly/8U+hm9DpIIoWuvySverzw==} - mdn-data@2.34.0: - resolution: {integrity: sha512-OgIlLv0NxJKVW4GTSAoEgpRGd4F2XCqGinK0MsMlBCCS/Zcm2/LsbercNWNA7PeMMcjl75NnI97eqyo7zkdxWA==} + mdn-data@2.35.0: + resolution: {integrity: sha512-k+1+dEIm2z/BEfdvYzT/fIyAGeDBo/1AJNJI4ilFXJRYoxP/3Ds+GP8shAOIq8jYXY9N5nGB3Ag104NsagmLAA==} mermaid@11.17.2: resolution: {integrity: sha512-V6K3C8EBdEsPFZXSKMJe6ppQOENxuHARr9GvHX4hh47lAbhMRD9qf4oEK7LoaRQxULMa80/qt5gHO73aCleBBg==} @@ -1780,8 +1740,8 @@ packages: resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} engines: {node: '>=16 || 14 >=14.17'} - mocha@12.0.1: - resolution: {integrity: sha512-/ILgtFHV+R7EJLwN0OkrPPOu6wbJyrtuRtTJ5szdFHv2A3mPmkbu3r1H2q6FhaAfywDJCulcQQ2S9qDGfZW6dw==} + mocha@12.0.2: + resolution: {integrity: sha512-SjAulGHxlMJLCD1bhvJBAiYwYxglydRzA9PDQ5MALq1oLRMMtIhxSQJ0olCFgA7c9YbTdxC0KOV0wl8JEDYVhA==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -1840,18 +1800,10 @@ packages: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} - p-limit@4.0.0: - resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} - p-locate@6.0.0: - resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - package-manager-detector@1.8.0: resolution: {integrity: sha512-yQA4H19AmPEoMUeavPMDIe1higySl/gH/yaQrkT/s07Qp+7pp2hYz30N3z2l5BkjVkF9Ow6o0wjJamm2y7Sn0A==} @@ -1902,8 +1854,8 @@ packages: resolution: {integrity: sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==} engines: {node: '>=6.0.0'} - prettier@3.9.6: - resolution: {integrity: sha512-OpN0zzVdiaiAhxpuuj5efpIS4sY9j7bY6uR5mnj5yPzGkdkjNKSJeUThPb60Jw29QuAZgA4o+/iB49kFiaBX6g==} + prettier@3.9.8: + resolution: {integrity: sha512-WRFq3Wn3WId7LLROfMLdH7xaFr2jR62wU8nLO6rQUOLOxNZUviyJQs1M0iIhLexSFy+L+w0ch66wtoO2jRjG0A==} engines: {node: '>=14'} hasBin: true @@ -2036,8 +1988,8 @@ packages: resolution: {integrity: sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==} engines: {node: '>=14.16'} - style-mod@4.1.3: - resolution: {integrity: sha512-i/n8VsZydrugj3Iuzll8+x/00GH2vnYsk1eomD8QiRrSAeW6ItbCQDtfXCeJHd0iwiNagqjQkvpvREEPtW3IoQ==} + style-mod@4.1.4: + resolution: {integrity: sha512-XXWIQt633/EpAFx8aZDOTjBzrCaGmhvEQlQo6MVPfa2OzO2cWo+4hV9h+6UkHYlXGfy+ODXKUdP7Pthmcu5ATw==} stylis@4.4.0: resolution: {integrity: sha512-5Z9ZpRzfuH6l/UAvCPAPUo3665Nk2wLaZU3x+TLHKVzIz33+sbJqbtrYoC3KD4/uVOr2Zp+L0LySezP9OHV9yA==} @@ -2093,8 +2045,8 @@ packages: resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} engines: {node: '>= 0.4'} - typed-array-byte-offset@1.0.4: - resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} + typed-array-byte-offset@1.0.5: + resolution: {integrity: sha512-0FHJvLPqZ7KJzp17O13jfsAjsqazgrxBu2zEK95PmUz8lv2+GjRuxUInCr2Rk9Dms3ihN21zJ929ZO43yJ95QQ==} engines: {node: '>= 0.4'} typed-array-length@1.0.8: @@ -2125,10 +2077,6 @@ packages: undici-types@8.9.0: resolution: {integrity: sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==} - unicorn-magic@0.3.0: - resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} - engines: {node: '>=18'} - uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -2151,8 +2099,8 @@ packages: resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} engines: {node: '>= 0.4'} - which-typed-array@1.1.22: - resolution: {integrity: sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==} + which-typed-array@1.1.24: + resolution: {integrity: sha512-wk4Mf4pR5mRP7eYuuTBCIQ9d0ud2Fv2jRLQpfgnRjbOxAFHmjKFValgTpitVKzJJS8ajnYQV2Du1SZ8j6b/EUQ==} engines: {node: '>= 0.4'} which@2.0.2: @@ -2171,13 +2119,9 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - yocto-queue@1.2.2: - resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==} - engines: {node: '>=12.20'} - snapshots: - '@antfu/install-pkg@2.0.1': + '@antfu/install-pkg@2.1.0': dependencies: package-manager-detector: 1.8.0 tinyexec: 1.3.1 @@ -2201,15 +2145,15 @@ snapshots: '@codemirror/autocomplete@6.20.3': dependencies: '@codemirror/language': 6.12.4 - '@codemirror/state': 6.7.4 - '@codemirror/view': 6.43.11 + '@codemirror/state': 6.7.5 + '@codemirror/view': 6.43.12 '@lezer/common': 1.5.2 - '@codemirror/commands@6.11.0': + '@codemirror/commands@6.11.1': dependencies: '@codemirror/language': 6.12.4 - '@codemirror/state': 6.7.4 - '@codemirror/view': 6.43.11 + '@codemirror/state': 6.7.5 + '@codemirror/view': 6.43.12 '@lezer/common': 1.5.2 '@codemirror/lang-cpp@6.0.3': @@ -2221,7 +2165,7 @@ snapshots: dependencies: '@codemirror/autocomplete': 6.20.3 '@codemirror/language': 6.12.4 - '@codemirror/state': 6.7.4 + '@codemirror/state': 6.7.5 '@lezer/common': 1.5.2 '@lezer/css': 1.3.6 @@ -2229,7 +2173,7 @@ snapshots: dependencies: '@codemirror/autocomplete': 6.20.3 '@codemirror/language': 6.12.4 - '@codemirror/state': 6.7.4 + '@codemirror/state': 6.7.5 '@lezer/common': 1.5.2 '@lezer/go': 1.0.1 @@ -2239,8 +2183,8 @@ snapshots: '@codemirror/lang-css': 6.3.1 '@codemirror/lang-javascript': 6.2.5 '@codemirror/language': 6.12.4 - '@codemirror/state': 6.7.4 - '@codemirror/view': 6.43.11 + '@codemirror/state': 6.7.5 + '@codemirror/view': 6.43.12 '@lezer/common': 1.5.2 '@lezer/css': 1.3.6 '@lezer/html': 1.3.13 @@ -2255,70 +2199,43 @@ snapshots: '@codemirror/autocomplete': 6.20.3 '@codemirror/language': 6.12.4 '@codemirror/lint': 6.9.7 - '@codemirror/state': 6.7.4 - '@codemirror/view': 6.43.11 + '@codemirror/state': 6.7.5 + '@codemirror/view': 6.43.12 '@lezer/common': 1.5.2 - '@lezer/javascript': 1.5.4 + '@lezer/javascript': 1.5.5 '@codemirror/lang-json@6.0.2': dependencies: '@codemirror/language': 6.12.4 '@lezer/json': 1.0.3 - '@codemirror/lang-markdown@6.5.2': - dependencies: - '@codemirror/autocomplete': 6.20.3 - '@codemirror/lang-html': 6.4.12 - '@codemirror/language': 6.12.4 - '@codemirror/state': 6.7.4 - '@codemirror/view': 6.43.11 - '@lezer/common': 1.5.2 - '@lezer/markdown': 1.7.2 - - '@codemirror/lang-php@6.0.2': - dependencies: - '@codemirror/lang-html': 6.4.12 - '@codemirror/language': 6.12.4 - '@codemirror/state': 6.7.4 - '@lezer/common': 1.5.2 - '@lezer/php': 1.0.6 - '@codemirror/lang-python@6.2.1': dependencies: '@codemirror/autocomplete': 6.20.3 '@codemirror/language': 6.12.4 - '@codemirror/state': 6.7.4 + '@codemirror/state': 6.7.5 '@lezer/common': 1.5.2 '@lezer/python': 1.1.19 '@codemirror/lang-rust@6.0.2': dependencies: '@codemirror/language': 6.12.4 - '@lezer/rust': 1.0.2 + '@lezer/rust': 1.0.3 '@codemirror/lang-sql@6.10.0': dependencies: '@codemirror/autocomplete': 6.20.3 '@codemirror/language': 6.12.4 - '@codemirror/state': 6.7.4 + '@codemirror/state': 6.7.5 '@lezer/common': 1.5.2 '@lezer/highlight': 1.2.3 '@lezer/lr': 1.4.10 - '@codemirror/lang-xml@6.1.0': - dependencies: - '@codemirror/autocomplete': 6.20.3 - '@codemirror/language': 6.12.4 - '@codemirror/state': 6.7.4 - '@codemirror/view': 6.43.11 - '@lezer/common': 1.5.2 - '@lezer/xml': 1.0.6 - '@codemirror/lang-yaml@6.1.3': dependencies: '@codemirror/autocomplete': 6.20.3 '@codemirror/language': 6.12.4 - '@codemirror/state': 6.7.4 + '@codemirror/state': 6.7.5 '@lezer/common': 1.5.2 '@lezer/highlight': 1.2.3 '@lezer/lr': 1.4.10 @@ -2326,12 +2243,12 @@ snapshots: '@codemirror/language@6.12.4': dependencies: - '@codemirror/state': 6.7.4 - '@codemirror/view': 6.43.11 + '@codemirror/state': 6.7.5 + '@codemirror/view': 6.43.12 '@lezer/common': 1.5.2 '@lezer/highlight': 1.2.3 '@lezer/lr': 1.4.10 - style-mod: 4.1.3 + style-mod: 4.1.4 '@codemirror/legacy-modes@6.5.4': dependencies: @@ -2339,25 +2256,25 @@ snapshots: '@codemirror/lint@6.9.7': dependencies: - '@codemirror/state': 6.7.4 - '@codemirror/view': 6.43.11 + '@codemirror/state': 6.7.5 + '@codemirror/view': 6.43.12 crelt: 1.0.7 '@codemirror/search@6.7.2': dependencies: - '@codemirror/state': 6.7.4 - '@codemirror/view': 6.43.11 + '@codemirror/state': 6.7.5 + '@codemirror/view': 6.43.12 crelt: 1.0.7 - '@codemirror/state@6.7.4': + '@codemirror/state@6.7.5': dependencies: '@marijn/find-cluster-break': 1.0.4 - '@codemirror/view@6.43.11': + '@codemirror/view@6.43.12': dependencies: - '@codemirror/state': 6.7.4 + '@codemirror/state': 6.7.5 crelt: 1.0.7 - style-mod: 4.1.3 + style-mod: 4.1.4 w3c-keyname: 2.2.8 '@esbuild/aix-ppc64@0.28.2': @@ -2438,9 +2355,9 @@ snapshots: '@esbuild/win32-x64@0.28.2': optional: true - '@eslint-community/eslint-utils@4.10.1(eslint@10.10.0(supports-color@8.1.1))': + '@eslint-community/eslint-utils@4.10.1(eslint@10.11.0(supports-color@8.1.1))': dependencies: - eslint: 10.10.0(supports-color@8.1.1) + eslint: 10.11.0(supports-color@8.1.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} @@ -2461,20 +2378,20 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 - '@eslint/css-tree@4.1.0': + '@eslint/css-tree@4.1.1': dependencies: - mdn-data: 2.34.0 + mdn-data: 2.35.0 source-map-js: 1.2.1 '@eslint/css@2.0.0': dependencies: '@eslint/core': 1.2.1 - '@eslint/css-tree': 4.1.0 + '@eslint/css-tree': 4.1.1 '@eslint/plugin-kit': 0.7.3 - '@eslint/js@10.0.1(eslint@10.10.0(supports-color@8.1.1))': + '@eslint/js@10.0.1(eslint@10.11.0(supports-color@8.1.1))': optionalDependencies: - eslint: 10.10.0(supports-color@8.1.1) + eslint: 10.11.0(supports-color@8.1.1) '@eslint/object-schema@3.0.5': {} @@ -2483,7 +2400,7 @@ snapshots: '@eslint/core': 1.2.1 levn: 0.4.1 - '@hpcc-js/wasm-graphviz@1.29.0': {} + '@hpcc-js/wasm-graphviz@1.29.1': {} '@humanfs/core@0.19.2': dependencies: @@ -2505,7 +2422,7 @@ snapshots: '@iconify/utils@3.1.7': dependencies: - '@antfu/install-pkg': 2.0.1 + '@antfu/install-pkg': 2.1.0 '@iconify/types': 2.0.0 import-meta-resolve: 4.2.0 @@ -2553,7 +2470,7 @@ snapshots: '@lezer/highlight': 1.2.3 '@lezer/lr': 1.4.10 - '@lezer/javascript@1.5.4': + '@lezer/javascript@1.5.5': dependencies: '@lezer/common': 1.5.2 '@lezer/highlight': 1.2.3 @@ -2569,30 +2486,13 @@ snapshots: dependencies: '@lezer/common': 1.5.2 - '@lezer/markdown@1.7.2': - dependencies: - '@lezer/common': 1.5.2 - '@lezer/highlight': 1.2.3 - - '@lezer/php@1.0.6': - dependencies: - '@lezer/common': 1.5.2 - '@lezer/highlight': 1.2.3 - '@lezer/lr': 1.4.10 - '@lezer/python@1.1.19': dependencies: '@lezer/common': 1.5.2 '@lezer/highlight': 1.2.3 '@lezer/lr': 1.4.10 - '@lezer/rust@1.0.2': - dependencies: - '@lezer/common': 1.5.2 - '@lezer/highlight': 1.2.3 - '@lezer/lr': 1.4.10 - - '@lezer/xml@1.0.6': + '@lezer/rust@1.0.3': dependencies: '@lezer/common': 1.5.2 '@lezer/highlight': 1.2.3 @@ -2673,11 +2573,11 @@ snapshots: '@types/d3-axis@3.0.6': dependencies: - '@types/d3-selection': 3.0.11 + '@types/d3-selection': 3.0.12 '@types/d3-brush@3.0.6': dependencies: - '@types/d3-selection': 3.0.11 + '@types/d3-selection': 3.0.12 '@types/d3-chord@3.0.6': {} @@ -2694,7 +2594,7 @@ snapshots: '@types/d3-drag@3.0.7': dependencies: - '@types/d3-selection': 3.0.11 + '@types/d3-selection': 3.0.12 '@types/d3-dsv@3.0.7': {} @@ -2732,7 +2632,7 @@ snapshots: dependencies: '@types/d3-time': 3.0.4 - '@types/d3-selection@3.0.11': {} + '@types/d3-selection@3.0.12': {} '@types/d3-shape@3.2.0': dependencies: @@ -2746,12 +2646,12 @@ snapshots: '@types/d3-transition@3.0.9': dependencies: - '@types/d3-selection': 3.0.11 + '@types/d3-selection': 3.0.12 '@types/d3-zoom@3.0.8': dependencies: '@types/d3-interpolate': 3.0.4 - '@types/d3-selection': 3.0.11 + '@types/d3-selection': 3.0.12 '@types/d3@7.4.3': dependencies: @@ -2778,7 +2678,7 @@ snapshots: '@types/d3-random': 3.0.4 '@types/d3-scale': 4.0.9 '@types/d3-scale-chromatic': 3.1.0 - '@types/d3-selection': 3.0.11 + '@types/d3-selection': 3.0.12 '@types/d3-shape': 3.2.0 '@types/d3-time': 3.0.4 '@types/d3-time-format': 4.0.3 @@ -2788,23 +2688,19 @@ snapshots: '@types/deep-eql@4.0.2': {} - '@types/dom-navigation@1.0.7': {} - '@types/esrecurse@4.3.1': {} '@types/estree@1.0.9': {} '@types/geojson@7946.0.16': {} - '@types/js-beautify@1.14.3': {} - '@types/json-schema@7.0.15': {} '@types/json5@0.0.29': {} '@types/mocha@10.0.10': {} - '@types/node@26.5.1': + '@types/node@26.6.2': dependencies: undici-types: 8.9.0 @@ -2813,15 +2709,15 @@ snapshots: '@types/trusted-types@2.0.7': optional: true - '@typescript-eslint/eslint-plugin@8.70.0(@typescript-eslint/parser@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@8.1.1))(supports-color@8.1.1))(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@8.1.1))(supports-color@8.1.1)': + '@typescript-eslint/eslint-plugin@8.70.0(@typescript-eslint/parser@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.11.0(supports-color@8.1.1))(supports-color@8.1.1))(@typescript/typescript6@6.0.2)(eslint@10.11.0(supports-color@8.1.1))(supports-color@8.1.1)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.70.0(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@8.1.1))(supports-color@8.1.1) + '@typescript-eslint/parser': 8.70.0(@typescript/typescript6@6.0.2)(eslint@10.11.0(supports-color@8.1.1))(supports-color@8.1.1) '@typescript-eslint/scope-manager': 8.70.0 - '@typescript-eslint/type-utils': 8.70.0(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@8.1.1))(supports-color@8.1.1) - '@typescript-eslint/utils': 8.70.0(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@8.1.1))(supports-color@8.1.1) + '@typescript-eslint/type-utils': 8.70.0(@typescript/typescript6@6.0.2)(eslint@10.11.0(supports-color@8.1.1))(supports-color@8.1.1) + '@typescript-eslint/utils': 8.70.0(@typescript/typescript6@6.0.2)(eslint@10.11.0(supports-color@8.1.1))(supports-color@8.1.1) '@typescript-eslint/visitor-keys': 8.70.0 - eslint: 10.10.0(supports-color@8.1.1) + eslint: 10.11.0(supports-color@8.1.1) ignore: 7.0.9 natural-compare: 1.4.0 ts-api-utils: 2.5.0(@typescript/typescript6@6.0.2) @@ -2829,14 +2725,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@8.1.1))(supports-color@8.1.1)': + '@typescript-eslint/parser@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.11.0(supports-color@8.1.1))(supports-color@8.1.1)': dependencies: '@typescript-eslint/scope-manager': 8.70.0 '@typescript-eslint/types': 8.70.0 '@typescript-eslint/typescript-estree': 8.70.0(@typescript/typescript6@6.0.2)(supports-color@8.1.1) '@typescript-eslint/visitor-keys': 8.70.0 debug: 4.4.3(supports-color@8.1.1) - eslint: 10.10.0(supports-color@8.1.1) + eslint: 10.11.0(supports-color@8.1.1) typescript: '@typescript/typescript6@6.0.2' transitivePeerDependencies: - supports-color @@ -2859,13 +2755,13 @@ snapshots: dependencies: typescript: '@typescript/typescript6@6.0.2' - '@typescript-eslint/type-utils@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@8.1.1))(supports-color@8.1.1)': + '@typescript-eslint/type-utils@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.11.0(supports-color@8.1.1))(supports-color@8.1.1)': dependencies: '@typescript-eslint/types': 8.70.0 '@typescript-eslint/typescript-estree': 8.70.0(@typescript/typescript6@6.0.2)(supports-color@8.1.1) - '@typescript-eslint/utils': 8.70.0(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@8.1.1))(supports-color@8.1.1) + '@typescript-eslint/utils': 8.70.0(@typescript/typescript6@6.0.2)(eslint@10.11.0(supports-color@8.1.1))(supports-color@8.1.1) debug: 4.4.3(supports-color@8.1.1) - eslint: 10.10.0(supports-color@8.1.1) + eslint: 10.11.0(supports-color@8.1.1) ts-api-utils: 2.5.0(@typescript/typescript6@6.0.2) typescript: '@typescript/typescript6@6.0.2' transitivePeerDependencies: @@ -2888,13 +2784,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@8.1.1))(supports-color@8.1.1)': + '@typescript-eslint/utils@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.11.0(supports-color@8.1.1))(supports-color@8.1.1)': dependencies: - '@eslint-community/eslint-utils': 4.10.1(eslint@10.10.0(supports-color@8.1.1)) + '@eslint-community/eslint-utils': 4.10.1(eslint@10.11.0(supports-color@8.1.1)) '@typescript-eslint/scope-manager': 8.70.0 '@typescript-eslint/types': 8.70.0 '@typescript-eslint/typescript-estree': 8.70.0(@typescript/typescript6@6.0.2)(supports-color@8.1.1) - eslint: 10.10.0(supports-color@8.1.1) + eslint: 10.11.0(supports-color@8.1.1) typescript: '@typescript/typescript6@6.0.2' transitivePeerDependencies: - supports-color @@ -3052,12 +2948,12 @@ snapshots: balanced-match@4.0.4: {} - brace-expansion@1.1.18: + brace-expansion@1.1.21: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@5.0.9: + brace-expansion@5.0.12: dependencies: balanced-match: 4.0.4 @@ -3097,12 +2993,12 @@ snapshots: codemirror@6.0.2: dependencies: '@codemirror/autocomplete': 6.20.3 - '@codemirror/commands': 6.11.0 + '@codemirror/commands': 6.11.1 '@codemirror/language': 6.12.4 '@codemirror/lint': 6.9.7 '@codemirror/search': 6.7.2 - '@codemirror/state': 6.7.4 - '@codemirror/view': 6.43.11 + '@codemirror/state': 6.7.5 + '@codemirror/view': 6.43.12 commander@7.2.0: {} @@ -3435,10 +3331,10 @@ snapshots: string.prototype.trimstart: 1.0.8 typed-array-buffer: 1.0.3 typed-array-byte-length: 1.0.3 - typed-array-byte-offset: 1.0.4 + typed-array-byte-offset: 1.0.5 typed-array-length: 1.0.8 unbox-primitive: 1.1.0 - which-typed-array: 1.1.22 + which-typed-array: 1.1.24 es-define-property@1.0.1: {} @@ -3501,29 +3397,29 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-prettier@10.1.8(eslint@10.10.0(supports-color@8.1.1)): + eslint-config-prettier@10.1.8(eslint@10.11.0(supports-color@8.1.1)): dependencies: - eslint: 10.10.0(supports-color@8.1.1) + eslint: 10.11.0(supports-color@8.1.1) eslint-import-resolver-node@0.3.10(supports-color@8.1.1): dependencies: debug: 3.2.7(supports-color@8.1.1) - is-core-module: 2.16.2 + is-core-module: 2.17.0 resolve: 2.0.0-next.7 transitivePeerDependencies: - supports-color - eslint-module-utils@2.14.0(@typescript-eslint/parser@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@8.1.1))(supports-color@8.1.1))(eslint-import-resolver-node@0.3.10(supports-color@8.1.1))(eslint@10.10.0(supports-color@8.1.1))(supports-color@8.1.1): + eslint-module-utils@2.14.0(@typescript-eslint/parser@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.11.0(supports-color@8.1.1))(supports-color@8.1.1))(eslint-import-resolver-node@0.3.10(supports-color@8.1.1))(eslint@10.11.0(supports-color@8.1.1))(supports-color@8.1.1): dependencies: debug: 3.2.7(supports-color@8.1.1) optionalDependencies: - '@typescript-eslint/parser': 8.70.0(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@8.1.1))(supports-color@8.1.1) - eslint: 10.10.0(supports-color@8.1.1) + '@typescript-eslint/parser': 8.70.0(@typescript/typescript6@6.0.2)(eslint@10.11.0(supports-color@8.1.1))(supports-color@8.1.1) + eslint: 10.11.0(supports-color@8.1.1) eslint-import-resolver-node: 0.3.10(supports-color@8.1.1) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@8.1.1))(supports-color@8.1.1))(eslint@10.10.0(supports-color@8.1.1))(supports-color@8.1.1): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.11.0(supports-color@8.1.1))(supports-color@8.1.1))(eslint@10.11.0(supports-color@8.1.1))(supports-color@8.1.1): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.2.0 @@ -3532,11 +3428,11 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7(supports-color@8.1.1) doctrine: 2.1.0 - eslint: 10.10.0(supports-color@8.1.1) + eslint: 10.11.0(supports-color@8.1.1) eslint-import-resolver-node: 0.3.10(supports-color@8.1.1) - eslint-module-utils: 2.14.0(@typescript-eslint/parser@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@8.1.1))(supports-color@8.1.1))(eslint-import-resolver-node@0.3.10(supports-color@8.1.1))(eslint@10.10.0(supports-color@8.1.1))(supports-color@8.1.1) + eslint-module-utils: 2.14.0(@typescript-eslint/parser@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.11.0(supports-color@8.1.1))(supports-color@8.1.1))(eslint-import-resolver-node@0.3.10(supports-color@8.1.1))(eslint@10.11.0(supports-color@8.1.1))(supports-color@8.1.1) hasown: 2.0.4 - is-core-module: 2.16.2 + is-core-module: 2.17.0 is-glob: 4.0.3 minimatch: 3.1.5 object.fromentries: 2.0.8 @@ -3546,20 +3442,20 @@ snapshots: string.prototype.trimend: 1.0.10 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.70.0(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@8.1.1))(supports-color@8.1.1) + '@typescript-eslint/parser': 8.70.0(@typescript/typescript6@6.0.2)(eslint@10.11.0(supports-color@8.1.1))(supports-color@8.1.1) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-prettier@5.5.6(eslint-config-prettier@10.1.8(eslint@10.10.0(supports-color@8.1.1)))(eslint@10.10.0(supports-color@8.1.1))(prettier@3.9.6): + eslint-plugin-prettier@5.5.6(eslint-config-prettier@10.1.8(eslint@10.11.0(supports-color@8.1.1)))(eslint@10.11.0(supports-color@8.1.1))(prettier@3.9.8): dependencies: - eslint: 10.10.0(supports-color@8.1.1) - prettier: 3.9.6 + eslint: 10.11.0(supports-color@8.1.1) + prettier: 3.9.8 prettier-linter-helpers: 1.0.1 synckit: 0.11.13 optionalDependencies: - eslint-config-prettier: 10.1.8(eslint@10.10.0(supports-color@8.1.1)) + eslint-config-prettier: 10.1.8(eslint@10.11.0(supports-color@8.1.1)) eslint-scope@9.1.2: dependencies: @@ -3572,9 +3468,9 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.10.0(supports-color@8.1.1): + eslint@10.11.0(supports-color@8.1.1): dependencies: - '@eslint-community/eslint-utils': 4.10.1(eslint@10.10.0(supports-color@8.1.1)) + '@eslint-community/eslint-utils': 4.10.1(eslint@10.11.0(supports-color@8.1.1)) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.23.5(supports-color@8.1.1) '@eslint/config-helpers': 0.7.0 @@ -3645,16 +3541,13 @@ snapshots: dependencies: flat-cache: 6.1.23 + find-up-simple@1.0.1: {} + find-up@5.0.0: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 - find-up@8.0.0: - dependencies: - locate-path: 8.0.0 - unicorn-magic: 0.3.0 - flat-cache@6.1.23: dependencies: cacheable: 2.5.0 @@ -3807,7 +3700,7 @@ snapshots: is-callable@1.2.7: {} - is-core-module@2.16.2: + is-core-module@2.17.0: dependencies: hasown: 2.0.4 @@ -3881,7 +3774,7 @@ snapshots: is-typed-array@1.1.15: dependencies: - which-typed-array: 1.1.22 + which-typed-array: 1.1.24 is-unicode-supported@0.1.0: {} @@ -3900,7 +3793,7 @@ snapshots: isexe@2.0.0: {} - js-yaml@5.4.1: + js-yaml@5.4.2: dependencies: argparse: 2.0.1 @@ -3935,13 +3828,9 @@ snapshots: dependencies: p-locate: 5.0.0 - locate-path@8.0.0: - dependencies: - p-locate: 6.0.0 - lodash-es@4.18.1: {} - lru-cache@11.5.2: {} + lru-cache@11.5.3: {} marked@16.4.2: {} @@ -3951,7 +3840,7 @@ snapshots: dependencies: '@mathjax/mathjax-newcm-font': 4.1.3 - mdn-data@2.34.0: {} + mdn-data@2.35.0: {} mermaid@11.17.2: dependencies: @@ -3980,27 +3869,27 @@ snapshots: minimatch@10.2.6: dependencies: - brace-expansion: 5.0.9 + brace-expansion: 5.0.12 minimatch@3.1.5: dependencies: - brace-expansion: 1.1.18 + brace-expansion: 1.1.21 minimist@1.2.8: {} minipass@7.1.3: {} - mocha@12.0.1: + mocha@12.0.2: dependencies: browser-stdout: 1.3.1 chokidar: 5.0.0 debug: 4.4.3(supports-color@8.1.1) diff: 9.0.0 - find-up: 8.0.0 + find-up-simple: 1.0.1 glob: 13.0.6 is-path-inside: 4.0.0 is-unicode-supported: 0.1.0 - js-yaml: 5.4.1 + js-yaml: 5.4.2 minimatch: 10.2.6 ms: 2.1.3 picocolors: 1.1.1 @@ -4082,18 +3971,10 @@ snapshots: dependencies: yocto-queue: 0.1.0 - p-limit@4.0.0: - dependencies: - yocto-queue: 1.2.2 - p-locate@5.0.0: dependencies: p-limit: 3.1.0 - p-locate@6.0.0: - dependencies: - p-limit: 4.0.0 - package-manager-detector@1.8.0: {} path-data-parser@0.1.0: {} @@ -4106,7 +3987,7 @@ snapshots: path-scurry@2.0.2: dependencies: - lru-cache: 11.5.2 + lru-cache: 11.5.3 minipass: 7.1.3 pdfjs-dist@6.3.289: @@ -4132,7 +4013,7 @@ snapshots: dependencies: fast-diff: 1.3.0 - prettier@3.9.6: {} + prettier@3.9.8: {} punycode@2.3.1: {} @@ -4165,7 +4046,7 @@ snapshots: resolve@2.0.0-next.7: dependencies: es-errors: 1.3.0 - is-core-module: 2.16.2 + is-core-module: 2.17.0 node-exports-info: 1.6.2 object-keys: 1.1.1 path-parse: 1.0.7 @@ -4302,7 +4183,7 @@ snapshots: strip-json-comments@5.0.3: {} - style-mod@4.1.3: {} + style-mod@4.1.4: {} stylis@4.4.0: {} @@ -4358,13 +4239,12 @@ snapshots: has-proto: 1.2.0 is-typed-array: 1.1.15 - typed-array-byte-offset@1.0.4: + typed-array-byte-offset@1.0.5: dependencies: available-typed-arrays: 1.0.7 call-bind: 1.0.9 for-each: 0.3.5 gopd: 1.2.0 - has-proto: 1.2.0 is-typed-array: 1.1.15 reflect.getprototypeof: 1.0.10 @@ -4377,13 +4257,13 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typescript-eslint@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@8.1.1))(supports-color@8.1.1): + typescript-eslint@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.11.0(supports-color@8.1.1))(supports-color@8.1.1): dependencies: - '@typescript-eslint/eslint-plugin': 8.70.0(@typescript-eslint/parser@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@8.1.1))(supports-color@8.1.1))(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@8.1.1))(supports-color@8.1.1) - '@typescript-eslint/parser': 8.70.0(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@8.1.1))(supports-color@8.1.1) + '@typescript-eslint/eslint-plugin': 8.70.0(@typescript-eslint/parser@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.11.0(supports-color@8.1.1))(supports-color@8.1.1))(@typescript/typescript6@6.0.2)(eslint@10.11.0(supports-color@8.1.1))(supports-color@8.1.1) + '@typescript-eslint/parser': 8.70.0(@typescript/typescript6@6.0.2)(eslint@10.11.0(supports-color@8.1.1))(supports-color@8.1.1) '@typescript-eslint/typescript-estree': 8.70.0(@typescript/typescript6@6.0.2)(supports-color@8.1.1) - '@typescript-eslint/utils': 8.70.0(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@8.1.1))(supports-color@8.1.1) - eslint: 10.10.0(supports-color@8.1.1) + '@typescript-eslint/utils': 8.70.0(@typescript/typescript6@6.0.2)(eslint@10.11.0(supports-color@8.1.1))(supports-color@8.1.1) + eslint: 10.11.0(supports-color@8.1.1) typescript: '@typescript/typescript6@6.0.2' transitivePeerDependencies: - supports-color @@ -4422,8 +4302,6 @@ snapshots: undici-types@8.9.0: {} - unicorn-magic@0.3.0: {} - uri-js@4.4.1: dependencies: punycode: 2.3.1 @@ -4454,7 +4332,7 @@ snapshots: isarray: 2.0.5 which-boxed-primitive: 1.1.1 which-collection: 1.0.2 - which-typed-array: 1.1.22 + which-typed-array: 1.1.24 which-collection@1.0.2: dependencies: @@ -4463,7 +4341,7 @@ snapshots: is-weakmap: 2.0.2 is-weakset: 2.0.4 - which-typed-array@1.1.22: + which-typed-array@1.1.24: dependencies: available-typed-arrays: 1.0.7 call-bind: 1.0.9 @@ -4482,5 +4360,3 @@ snapshots: workerpool@10.0.3: {} yocto-queue@0.1.0: {} - - yocto-queue@1.2.2: {} diff --git a/client/src/CodeChatEditorFramework.mts b/client/src/CodeChatEditorFramework.mts index ee0361ba..fb2b021c 100644 --- a/client/src/CodeChatEditorFramework.mts +++ b/client/src/CodeChatEditorFramework.mts @@ -62,9 +62,8 @@ const RESPONSE_TIMEOUT_MS = 15000; let webSocketComm: WebSocketComm; class WebSocketComm { - // Use a unique ID for each websocket message sent. See the Implementation - // section on Message IDs for more information. - // + // The initial websocket ID for a Client. Use a unique ID for each websocket + // message sent. wsId = 4; // The websocket used by this class. Really a `ReconnectingWebSocket`, but @@ -214,8 +213,8 @@ class WebSocketComm { // to track this manually instead. if (!this.isLoading) { // Wait until after the DOM is ready, since we - // rely on content set in - // `onDomContentLoaded` in the Client. + // rely on content set in `onDomContentLoaded` + // in the Client. await setContent( contents, currentUpdate.is_re_translation, diff --git a/client/src/CodeMirror-integration.mts b/client/src/CodeMirror-integration.mts index bdcfde4b..9050dae2 100644 --- a/client/src/CodeMirror-integration.mts +++ b/client/src/CodeMirror-integration.mts @@ -486,9 +486,8 @@ class DocBlockWidget extends WidgetType { `
${this.indent}
` + - // The contents of this doc block. Make it focusable by assigning a - // tab stop, but not editable (until it's replaced by the TinyMCE - // editor). + // The contents of this doc block. Make it focusable but not + // editable (until it's replaced by the TinyMCE editor). `
` + this.contents + "
"; @@ -704,29 +703,29 @@ const getContents = (element: Element): [HTMLDivElement, boolean] => { }; // Allow only spaces and delete/backspaces when editing the indent of a doc -// block. This is registered (see `DocBlockPlugin`'s `focusin` handler below) -// as a `beforeinput` listener on a doc block's indent div. It's defined here, -// as a single stable function reference, rather than as an inline arrow -// function created inside the `focusin` handler: `addEventListener` only -// skips re-adding a listener that's reference-equal to one already -// registered on the same target, and `focusin` can fire repeatedly on the -// same (unchanged, and therefore DOM-preserving -- see `DocBlockWidget.eq`) -// indent div, e.g. by blurring then refocusing it. A fresh arrow function -// per `focusin` call would defeat that dedup and accumulate listeners. +// block. This is registered (see `DocBlockPlugin`'s `focusin` handler below) as +// a `beforeinput` listener on a doc block's indent div. It's defined here, as a +// single stable function reference, rather than as an inline arrow function +// created inside the `focusin` handler: `addEventListener` only skips re-adding +// a listener that's reference-equal to one already registered on the same +// target, and `focusin` can fire repeatedly on the same (unchanged, and +// therefore DOM-preserving -- see `DocBlockWidget.eq`) indent div, e.g. by +// blurring then refocusing it. A fresh arrow function per `focusin` call would +// defeat that dedup and accumulate listeners. const onIndentBeforeinput = (event: InputEvent) => { // Only modify the behavior of inserts. if (event.data) { - // Block any insert that's not an insert of spaces. - // TODO: need to support tabs. + // Block any insert that's not an insert of spaces. TODO: need to + // support tabs. if (event.data !== " ".repeat(event.data.length)) { event.preventDefault(); } } }; -// Signal that a doc block's indent is dirty. See `onIndentBeforeinput` -// above for why this must be a stable function reference rather than an -// inline closure. +// Signal that a doc block's indent is dirty. See `onIndentBeforeinput` above +// for why this must be a stable function reference rather than an inline +// closure. const onIndentInput = (event: Event) => { const target = event.target; if (target instanceof HTMLElement) { @@ -894,8 +893,8 @@ const docBlockStartingAt = ( return found; }; -// Same as `docBlockStartingAt`, but looks for a doc block that ends exactly -// at `pos`. +// Same as `docBlockStartingAt`, but looks for a doc block that ends exactly at +// `pos`. const docBlockEndingAt = ( view: EditorView, pos: number, @@ -1133,8 +1132,8 @@ export const DocBlockPlugin = ViewPlugin.fromClass( // empty `selectionPath`, silently dropping this // edge placement and leaving the caret wherever // TinyMCE's own init happens to put it (its start). - // Anchoring on a text node instead keeps the walk - // -- and thus the edge placement -- intact. + // Anchoring on a text node instead keeps the + // walk -- and thus the edge placement -- intact. let edgeNode: Node = contents; while ( atEnd ? edgeNode.lastChild : edgeNode.firstChild @@ -1357,7 +1356,8 @@ export const DocBlockPlugin = ViewPlugin.fromClass( resolve(), ); // Untypeset math in the old doc block and the current - // doc block before moving its contents around. TODO: `tinymceDiv === null` in production at least once. + // doc block before moving its contents around. TODO: + // `tinymceDiv === null` in production at least once. const tinymceDiv = document.getElementById(TINYMCE_INST)!; mathJaxUnTypeset(tinymceDiv); @@ -1560,11 +1560,12 @@ export const codeMirrorLoad = async ( // For reloads, we need to remove previous instances; otherwise, Bad // Things happen. tinymce?.remove(); - // Per the [docs](https://codemirror.net/docs/ref/#view.EditorView.destroy), - // this must be called to clean up the view (DOM-external state - // such as global event listeners) before discarding it; simply - // replacing `codechatBody`'s contents below doesn't do this and - // would otherwise leak the old view on every reload. + // Per the + // [docs](https://codemirror.net/docs/ref/#view.EditorView.destroy), + // this must be called to clean up the view (DOM-external state such + // as global event listeners) before discarding it; simply replacing + // `codechatBody`'s contents below doesn't do this and would + // otherwise leak the old view on every reload. currentView.destroy(); } @@ -1683,13 +1684,13 @@ export const codeMirrorLoad = async ( parser, basicSetup, EditorView.lineWrapping, - // CodeMirror marks its editing surface `role="textbox"` - // but supplies no accessible name, so a screen reader - // announces the element holding the user's source code as - // an unlabeled text field. Point it at the filename the - // Server renders into the page header, which names the - // file and its directory: the label then follows whatever - // file is open without this code having to learn the path. + // CodeMirror marks its editing surface `role="textbox"` but + // supplies no accessible name, so a screen reader announces + // the element holding the user's source code as an + // unlabeled text field. Point it at the filename the Server + // renders into the page header, which names the file and + // its directory: the label then follows whatever file is + // open without this code having to learn the path. EditorView.contentAttributes.of({ "aria-labelledby": "CodeChat-filename", }), @@ -1913,8 +1914,8 @@ export const setCodeMirrorPositions = ( } updateMessageContents.cursor_position = cursorPosition; - // `currentView.viewport.from` isn't accurate, since it's not really the - // top line, but a margin before it; see the + // `currentView.viewport.from` isn't accurate, since it's not really the top + // line, but a margin before it; see the // [docs](https://codemirror.net/docs/ref/#view.EditorView.viewport). // Instead, use // [this approach](https://discuss.codemirror.net/t/how-can-i-get-the-top-line-number-in-real-time/9404). diff --git a/client/src/tinymce-config.mts b/client/src/tinymce-config.mts index bafcca44..ca65e97b 100644 --- a/client/src/tinymce-config.mts +++ b/client/src/tinymce-config.mts @@ -150,7 +150,7 @@ export const init = async ( // Needed to allow custom elements. extended_valid_elements: - "graphviz-graph[scale],wc-mermaid,xref[contenteditable|ref],fragment[contenteditable|id]", + "graphviz-graph[scale],wc-mermaid,xref[contenteditable|ref],fragment[contenteditable|following|id]", // Per the [docs](https://www.tiny.cloud/docs/tinymce/latest/content-filtering/#custom_elements), `~` marks tags as an inline element, not a block element. custom_elements: "graphviz-graph,wc-mermaid,~xref,~fragment", }, diff --git a/extensions/VSCode/.gitignore b/extensions/VSCode/.gitignore index 8dc0c274..ce72840b 100644 --- a/extensions/VSCode/.gitignore +++ b/extensions/VSCode/.gitignore @@ -29,9 +29,11 @@ log4rs.yml hashLocations.json static/ -# NAPI-RS +# NAPI-RS. `src/index.js` is tracked rather than generated -- see the +# comment at the top of that file, and the `--js` flag in the builder's +# NAPI build. src/index.d.ts -src/index.js +src/index-generated.js src/codechat-editor-client.win32-x64-msvc.node .windows/ *.log diff --git a/extensions/VSCode/package.json b/extensions/VSCode/package.json index cea8e7bf..bf78da4c 100644 --- a/extensions/VSCode/package.json +++ b/extensions/VSCode/package.json @@ -41,7 +41,7 @@ "type": "git", "url": "https://github.com/bjones1/CodeChat_Editor" }, - "version": "0.2.4", + "version": "0.2.5", "activationEvents": [ "onCommand:extension.codeChatEditorActivate", "onCommand:extension.codeChatEditorDeactivate", @@ -118,24 +118,24 @@ "@emnapi/core": "^1.11.3", "@emnapi/runtime": "^1.11.3", "@eslint/js": "^10.0.1", - "@napi-rs/cli": "^3.9.1", - "@tybys/wasm-util": "^0.10.3", + "@napi-rs/cli": "^3.10.4", + "@tybys/wasm-util": "^0.10.4", "@types/escape-html": "^1.0.4", - "@types/node": "^26.5.1", + "@types/node": "^26.6.2", "@types/vscode": "1.61.0", "@typescript-eslint/eslint-plugin": "^8.70.0", "@typescript-eslint/parser": "^8.70.0", "@typescript/native": "npm:typescript@^7.0.2", - "@vscode/vsce": "^3.9.2", + "@vscode/vsce": "^4.0.0", "chalk": "^6.0.0", "esbuild": "^0.28.2", - "eslint": "^10.10.0", + "eslint": "^10.11.0", "eslint-config-prettier": "^10.1.8", "eslint-plugin-import": "^2.32.0", "eslint-plugin-node": "^11.1.0", "eslint-plugin-prettier": "^5.5.6", "npm-run-all2": "^9.0.3", - "prettier": "^3.9.6", + "prettier": "^3.9.8", "typescript": "npm:@typescript/typescript6@^6.0.2", "typescript-eslint": "^8.70.0" }, diff --git a/extensions/VSCode/pnpm-lock.yaml b/extensions/VSCode/pnpm-lock.yaml index 55c966b6..bbe9cf17 100644 --- a/extensions/VSCode/pnpm-lock.yaml +++ b/extensions/VSCode/pnpm-lock.yaml @@ -20,34 +20,34 @@ importers: version: 1.11.3 '@eslint/js': specifier: ^10.0.1 - version: 10.0.1(eslint@10.10.0(supports-color@7.2.0)) + version: 10.0.1(eslint@10.11.0) '@napi-rs/cli': - specifier: ^3.9.1 - version: 3.9.1(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(@types/node@26.5.1)(emnapi@1.11.3)(supports-color@7.2.0) + specifier: ^3.10.4 + version: 3.10.4(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(@types/node@26.6.2) '@tybys/wasm-util': - specifier: ^0.10.3 - version: 0.10.3 + specifier: ^0.10.4 + version: 0.10.4 '@types/escape-html': specifier: ^1.0.4 version: 1.0.4 '@types/node': - specifier: ^26.5.1 - version: 26.5.1 + specifier: ^26.6.2 + version: 26.6.2 '@types/vscode': specifier: 1.61.0 version: 1.61.0 '@typescript-eslint/eslint-plugin': specifier: ^8.70.0 - version: 8.70.0(@typescript-eslint/parser@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@7.2.0))(supports-color@7.2.0))(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@7.2.0))(supports-color@7.2.0) + version: 8.70.0(@typescript-eslint/parser@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.11.0))(@typescript/typescript6@6.0.2)(eslint@10.11.0) '@typescript-eslint/parser': specifier: ^8.70.0 - version: 8.70.0(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@7.2.0))(supports-color@7.2.0) + version: 8.70.0(@typescript/typescript6@6.0.2)(eslint@10.11.0) '@typescript/native': specifier: npm:typescript@^7.0.2 version: typescript@7.0.2 '@vscode/vsce': - specifier: ^3.9.2 - version: 3.9.2(supports-color@7.2.0) + specifier: ^4.0.0 + version: 4.0.0 chalk: specifier: ^6.0.0 version: 6.0.0 @@ -55,32 +55,32 @@ importers: specifier: ^0.28.2 version: 0.28.2 eslint: - specifier: ^10.10.0 - version: 10.10.0(supports-color@7.2.0) + specifier: ^10.11.0 + version: 10.11.0 eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@10.10.0(supports-color@7.2.0)) + version: 10.1.8(eslint@10.11.0) eslint-plugin-import: specifier: ^2.32.0 - version: 2.32.0(@typescript-eslint/parser@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@7.2.0))(supports-color@7.2.0))(eslint@10.10.0(supports-color@7.2.0))(supports-color@7.2.0) + version: 2.32.0(@typescript-eslint/parser@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.11.0))(eslint@10.11.0) eslint-plugin-node: specifier: ^11.1.0 - version: 11.1.0(eslint@10.10.0(supports-color@7.2.0)) + version: 11.1.0(eslint@10.11.0) eslint-plugin-prettier: specifier: ^5.5.6 - version: 5.5.6(eslint-config-prettier@10.1.8(eslint@10.10.0(supports-color@7.2.0)))(eslint@10.10.0(supports-color@7.2.0))(prettier@3.9.6) + version: 5.5.6(eslint-config-prettier@10.1.8(eslint@10.11.0))(eslint@10.11.0)(prettier@3.9.8) npm-run-all2: specifier: ^9.0.3 version: 9.0.3 prettier: - specifier: ^3.9.6 - version: 3.9.6 + specifier: ^3.9.8 + version: 3.9.8 typescript: specifier: npm:@typescript/typescript6@^6.0.2 version: '@typescript/typescript6@6.0.2' typescript-eslint: specifier: ^8.70.0 - version: 8.70.0(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@7.2.0))(supports-color@7.2.0) + version: 8.70.0(@typescript/typescript6@6.0.2)(eslint@10.11.0) optionalDependencies: bufferutil: specifier: ^4.1.0 @@ -88,12 +88,6 @@ importers: packages: - '@azu/format-text@1.0.2': - resolution: {integrity: sha512-Swi4N7Edy1Eqq82GxgEECXSSLyn6GOb5htRFPzBDdUkECGXtlf12ynO5oJSpWKPwCaUssOu7NfhDcCWpIC6Ywg==} - - '@azu/style-format@1.0.1': - resolution: {integrity: sha512-AHcTojlNBdD/3/KxIKlg8sxIWHfOtQszLvOpagLTO+bjC3u7SAszu1lf//u7JJC50aUSH+BVWDD/KvaA6Gfn5g==} - '@azure/abort-controller@2.2.0': resolution: {integrity: sha512-fNAjWnA/nZ2jz31kxR/AqRaUT8ewHBw/WuBIosK0moMy1C9e5ValbDfFdIxJzVOOYaYkV/b2F1S4H/aHiqfVQg==} engines: {node: '>=22.0.0'} @@ -122,38 +116,26 @@ packages: resolution: {integrity: sha512-9n2pWK61veAuN0V20t9lOuoV4CFMdyAZ1ygZzvBGk/pBBJRib/PjL9PLXa/aI2CcPpyHfqVsxxqLCYl6uZlfDw==} engines: {node: '>=22.0.0'} - '@azure/identity@4.13.2': - resolution: {integrity: sha512-NXL2/pCJctLxgw8bvrwwgge743kEq8LBT+O1pmV0vyUwetzFPH9auP6jhkU/cgZCPPtWoewAe3ncaGCgPo07fA==} + '@azure/identity@4.13.3': + resolution: {integrity: sha512-zGQPtqvXPgSA8yfV2CkIQ1qirqk0p9AIVpC5uEkdXQYcKl07QHvyaGYRnZOk0AsQUmxNb4wfkcwY5di8Z5xa9A==} engines: {node: '>=22.0.0'} '@azure/logger@1.4.0': resolution: {integrity: sha512-rbAE25KUfjU/s3XHUdJgceoCP5dEOpMx85J04kF+QMdta73XkuG9JGHHinch+XIoKpBdqljin+KqURpJriSzLA==} engines: {node: '>=22.0.0'} - '@azure/msal-browser@5.21.0': - resolution: {integrity: sha512-80OcuXDErmcEDAIH9pBtSqBsed2sPT/IWmbG3xHLoPMl5zc8TINd6SlJAbVSmN5huGa3xGAg5qR7VnpaIEK0Zw==} - engines: {node: '>=0.8.0'} - - '@azure/msal-common@16.13.0': - resolution: {integrity: sha512-rOAy0KUcyBbdwVJ+f3uPpthXatFLLZN+/KWAsTLzk1aB23Xl9DRmmXYwSvBFOZyXj4jUQQ5FKxxRkhAFW1fOow==} + '@azure/msal-browser@5.22.0': + resolution: {integrity: sha512-5kgu9xeEKgGc2JeidxAtU15NJTqiH/CMCRRQAJ4Rac56kB7KVg91vbNmn+z3RO1vNomPN69UvjKG9h1Pghx6dQ==} engines: {node: '>=0.8.0'} - '@azure/msal-common@16.14.0': - resolution: {integrity: sha512-A4rb55hI86Q9tBl/+jBj7TMz7iX2RFgQs/nExFzcAtoI/BFRVdaH5SL/MivrYD7qvweMpN8AgVvVMHV8UBYxew==} + '@azure/msal-common@16.14.1': + resolution: {integrity: sha512-Or6xhPNyi4zHW25158yxBoyxuCqNSPa5YBVqfF1J5Ks4MJWBo/USXdp05DQIPu1Zli00YZu6t0+h6KvHJealxQ==} engines: {node: '>=0.8.0'} - '@azure/msal-node@5.6.0': - resolution: {integrity: sha512-uFY9NxrWHw8PwZx7gAX6PDn+9vdfS05+levc/kwkx77IkjfaldnQbbcQzzDIZ5Hq5Zdr6/z92oAIoRWKp6MnOA==} + '@azure/msal-node@6.0.1': + resolution: {integrity: sha512-ixSO1Y/kCVRthRs+hSx/5qkwaunX1/RAePhlMN0wIpIQ4WEZ6AREGGnGd1AP0qspHVsAwzWQKGubpjh50JyJIQ==} engines: {node: '>=20'} - '@babel/code-frame@7.29.7': - resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.29.7': - resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} - engines: {node: '>=6.9.0'} - '@cacheable/memory@2.2.0': resolution: {integrity: sha512-CTLKqLItRCEixEAewD3/j9DB3/o96gpTPD4eJ1v+DGOlxZRZncRQkGYqqnAGCscYd6RNeXfGeiuCphsPtqyIfQ==} @@ -545,8 +527,8 @@ packages: '@keyv/serialize@1.1.1': resolution: {integrity: sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==} - '@napi-rs/cli@3.9.1': - resolution: {integrity: sha512-2DYBrM2j4n00L+O7fKAS38q19rVQK2HXz5RxSuJgFyZrd9TrdVQFmHOfqvqqsRIRBTZmqiMqBd/yzn4X1a23DQ==} + '@napi-rs/cli@3.10.4': + resolution: {integrity: sha512-7yvXpu/m4p1Re1/DViAooSYAyivYEhqDrjuq66a6haXLEAKrZSzndG7B850g1irngI1pAdZS5xL4tsu0xQ8P9Q==} engines: {node: ^20.17.0 || ^22.13.0 || >= 23.5.0} hasBin: true peerDependencies: @@ -596,6 +578,87 @@ packages: '@napi-rs/cross-toolchain-x64-target-x86_64': optional: true + '@napi-rs/keyring-darwin-arm64@1.3.0': + resolution: {integrity: sha512-pl76hJvdYUBn6I24bXiOBMA9nbDapo3I5B+f3OorjDU4dUMSypXeKbOVehJe8fhgTiH24flMyTS3aAIy43xegQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@napi-rs/keyring-darwin-x64@1.3.0': + resolution: {integrity: sha512-YcJtEV5LA3cvA4z3BurgxH5IhTsW1JfIvcAAcqcecwk06Si9F9NqkxbZVIfDwQ8oRHgaBmT3zZJnLAotCrVahw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@napi-rs/keyring-freebsd-x64@1.3.0': + resolution: {integrity: sha512-vlLf31TGhfRAaxLDBhg8b89ss0HHD/lyNmL5F3UjSaz5CUXElsJmKYq9fqA/B+cZKUEUcLHHGhF0I/CqcFdaVw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + + '@napi-rs/keyring-linux-arm-gnueabihf@1.3.0': + resolution: {integrity: sha512-KiWdMMu/Inz/bHHIAGrnF7r54FZDYXuHO6UFF/rhIrshUsxbMG1Rl9lEymNtqqsVo927G0VYcb02FzWQ3iBQRQ==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@napi-rs/keyring-linux-arm64-gnu@1.3.0': + resolution: {integrity: sha512-eyKGpY40lm9Jvs1aD294XRH4y7+TlJM0YVAryZeXA6TX0mb4gMkxVXwSQv7MCwgah7raeUd0dKUb4BPAYIgcMg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@napi-rs/keyring-linux-arm64-musl@1.3.0': + resolution: {integrity: sha512-iIK6JWHXAJqDrEyLY3TmswwloVyt2vj+04TZnew+uSJ9gnDO8EwRbp3/iw3LpWaXiDO7VomGO6y8I0Id8uBZSw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@napi-rs/keyring-linux-riscv64-gnu@1.3.0': + resolution: {integrity: sha512-/PGqrwn6EwgtK6vccASSXJRfOSP4vN1F4ASsIQ+7MdrK6hNvAJ1FZPrIuD5gGGdxezo3F++To2Wq7DbuGIeuNQ==} + engines: {node: '>= 10'} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@napi-rs/keyring-linux-x64-gnu@1.3.0': + resolution: {integrity: sha512-2PDK1WKWTu9lBGq9VvNEkSlQD3O7YwVpmnyN2M3cy4v7NJ/8gDMd9GXv3G+FVXN13uhp4gnnPBS+ScefmEeD2A==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@napi-rs/keyring-linux-x64-musl@1.3.0': + resolution: {integrity: sha512-oJ2HkX8YUo46QBkn0pG+HuIKQNqr523q6vBobCn+P95s4C4K6/kLBqHY/1bg5J4ap31DzsznhnFKcfBNBsjCnw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@napi-rs/keyring-win32-arm64-msvc@1.3.0': + resolution: {integrity: sha512-tOd3c/uAaeoE4ycVlmAdSvygz0Zt3zdca6Y7gokBeIbaRDWpjDIUOpU3MvML59XAaqyuKGsVVu0F/DZb1lHPmw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@napi-rs/keyring-win32-ia32-msvc@1.3.0': + resolution: {integrity: sha512-sPSqeAFZMGqP1R++M2JTza7GQJJ/TpCo6JU6Vcd4jnebvOaEDs9b7eipakU1PJdSvhpC2yXMCNRk9gXfrhuwHQ==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + + '@napi-rs/keyring-win32-x64-msvc@1.3.0': + resolution: {integrity: sha512-4DnCWXwDc0HRKwyRlG5y0VhKZW2tNRQfKKfyj6IX/KWfDNyq9hn4n+GL1auyDcOO/v8PwnhmYo2+rOOqCkvvOg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@napi-rs/keyring@1.3.0': + resolution: {integrity: sha512-WrOw/bcXm0f9qHkumlT1QlArXSTWqaY9sunsDpOk+yCCorCKMxvWT/a3xko4EYHVdeZoh00yI2TydXn6eyICDA==} + engines: {node: '>= 10'} + '@napi-rs/lzma-android-arm-eabi@1.5.1': resolution: {integrity: sha512-sahBe4ko2Z69NPTddaX6ZgbQZu9SDoITxw1S3dWl1gAGynZG34qHHCT8UaUMFxf3h3zMhCJjEzz4basaBxiTuQ==} engines: {node: ^22.20 || ^24.12 || >=25} @@ -905,18 +968,6 @@ packages: resolution: {integrity: sha512-VjHyKEqXAwYZK+HY7iJctYvRm3TFEbaQxeZwvAG1QRkoo1a39phMY8J6x9tUEqJI03W6MysB8F2jacI6wvcx+w==} engines: {node: '>= 12.22.0'} - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - '@octokit/auth-token@6.0.0': resolution: {integrity: sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==} engines: {node: '>= 20'} @@ -982,35 +1033,13 @@ packages: '@rtsao/scc@1.1.0': resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - '@secretlint/config-creator@10.2.2': - resolution: {integrity: sha512-BynOBe7Hn3LJjb3CqCHZjeNB09s/vgf0baBaHVw67w7gHF0d25c3ZsZ5+vv8TgwSchRdUCRrbbcq5i2B1fJ2QQ==} - engines: {node: '>=20.0.0'} - - '@secretlint/config-loader@10.2.2': - resolution: {integrity: sha512-ndjjQNgLg4DIcMJp4iaRD6xb9ijWQZVbd9694Ol2IszBIbGPPkwZHzJYKICbTBmh6AH/pLr0CiCaWdGJU7RbpQ==} - engines: {node: '>=20.0.0'} - '@secretlint/core@10.2.2': resolution: {integrity: sha512-6rdwBwLP9+TO3rRjMVW1tX+lQeo5gBbxl1I5F8nh8bgGtKwdlCMhMKsBWzWg1ostxx/tIG7OjZI0/BxsP8bUgw==} engines: {node: '>=20.0.0'} - '@secretlint/formatter@10.2.2': - resolution: {integrity: sha512-10f/eKV+8YdGKNQmoDUD1QnYL7TzhI2kzyx95vsJKbEa8akzLAR5ZrWIZ3LbcMmBLzxlSQMMccRmi05yDQ5YDA==} - engines: {node: '>=20.0.0'} - - '@secretlint/node@10.2.2': - resolution: {integrity: sha512-eZGJQgcg/3WRBwX1bRnss7RmHHK/YlP/l7zOQsrjexYt6l+JJa5YhUmHbuGXS94yW0++3YkEJp0kQGYhiw1DMQ==} - engines: {node: '>=20.0.0'} - '@secretlint/profiler@10.2.2': resolution: {integrity: sha512-qm9rWfkh/o8OvzMIfY8a5bCmgIniSpltbVlUVl983zDG1bUuQNd1/5lUEeWx5o/WJ99bXxS7yNI4/KIXfHexig==} - '@secretlint/resolver@10.2.2': - resolution: {integrity: sha512-3md0cp12e+Ae5V+crPQYGd6aaO7ahw95s28OlULGyclyyUtf861UoRGS2prnUrKh7MZb23kdDOyGCYb9br5e4w==} - - '@secretlint/secretlint-formatter-sarif@10.2.2': - resolution: {integrity: sha512-ojiF9TGRKJJw308DnYBucHxkpNovDNu1XvPh7IfUp0A12gzTtxuWDqdpuVezL7/IP8Ua7mp5/VkDMN9OLp1doQ==} - '@secretlint/secretlint-rule-no-dotenv@10.2.2': resolution: {integrity: sha512-KJRbIShA9DVc5Va3yArtJ6QDzGjg3PRa1uYp9As4RsyKtKSSZjI64jVca57FZ8gbuk4em0/0Jq+uy6485wxIdg==} engines: {node: '>=20.0.0'} @@ -1027,28 +1056,8 @@ packages: resolution: {integrity: sha512-Nqc90v4lWCXyakD6xNyNACBJNJ0tNCwj2WNk/7ivyacYHxiITVgmLUFXTBOeCdy79iz6HtN9Y31uw/jbLrdOAg==} engines: {node: '>=20.0.0'} - '@sindresorhus/merge-streams@2.3.0': - resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} - engines: {node: '>=18'} - - '@textlint/ast-node-types@15.8.0': - resolution: {integrity: sha512-5CiH9COYmovWmExQgs7763DzX6Gy9zjkjJ7JxCC95wyTcjwQn/8poNF6fv3qzRlmx8CRRde8DHr9FcgAAiPzgw==} - - '@textlint/linter-formatter@15.8.0': - resolution: {integrity: sha512-+oU3A235NATv6Lzi4xa4kJ65PuNJlIxesaO4AvDhDWA9FWm7y4XKWaoQCW1esgaQQ6dwnUiFKArQ8TcJ86mC4w==} - engines: {node: '>=20.18.0'} - - '@textlint/module-interop@15.8.0': - resolution: {integrity: sha512-rt+OR1WYGoLOY8HkA/aBPrqufF6yUUEsKEAh7XohTsT3lp9IyZFT6zOIbjul9P4FAzsmSPkcrYjVx3Bz/IUfkg==} - - '@textlint/resolver@15.8.0': - resolution: {integrity: sha512-E88tzfX3K8Jykk+38aJ9cy8RquD8ABVOPTO2rFEESq0wcg8x6/ypdAS8ZgR7OKiGqlRF0hkO/m5PbQwVfKM3VA==} - - '@textlint/types@15.8.0': - resolution: {integrity: sha512-Anhc6y5736YIsvqae0U6k0YmB2M/QVHkEeOv2aydAn/WIkdI69dCOiDbe3/+RagS3qstFTSFWJzNRA2lUjv19w==} - - '@tybys/wasm-util@0.10.3': - resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} + '@tybys/wasm-util@0.10.4': + resolution: {integrity: sha512-W3c4gRigFS0T/Ma4qIYF3GDAc5AQdHb1yL5znJT1Zv1YaD9Kitx656wBjvr19qbiosmZT8lWDM5BEMynUqX65A==} '@types/escape-html@1.0.4': resolution: {integrity: sha512-qZ72SFTgUAZ5a7Tj6kf2SHLetiH5S6f8G5frB2SPQ3EyF02kxdyBFf4Tz4banE3xCgGnKgWLt//a6VuYHKYJTg==} @@ -1065,14 +1074,8 @@ packages: '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - '@types/node@26.5.1': - resolution: {integrity: sha512-CzNm2FezW4VR/LjG6yUdiEgLE/rAQ9Slj5gCu/C2VrdcW7I0ahNZ8DRbHT7zOZ6r3ONgd/bsQIeSaoDGrd1C6g==} - - '@types/normalize-package-data@2.4.4': - resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - - '@types/sarif@2.1.7': - resolution: {integrity: sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==} + '@types/node@26.6.2': + resolution: {integrity: sha512-X1P21scMv4zGKLYqjdGjaKa7COa0RKVYYZZN/NfvLQ1JegxFhdhpZG/Lyn8AXx6CDUavKAd11v6BvfpkDByK8g==} '@types/vscode@1.61.0': resolution: {integrity: sha512-9k5Nwq45hkRwdfCFY+eKXeQQSbPoA114mF7U/4uJXRBJeGIO7MuJdhF1PnaDN+lllL9iKGQtd6FFXShBXMNaFg==} @@ -1312,9 +1315,9 @@ packages: '@vscode/vsce-sign@2.1.0': resolution: {integrity: sha512-9AQrqazrBgTgRSuwleLVXUrIUphY02/SFCh2TKYoLV/xifJAdblhdmEmw5gUrYSPQ3sRwNs9iyCMD14sATEE6g==} - '@vscode/vsce@3.9.2': - resolution: {integrity: sha512-XSxMosEEDO6vLxELAHVkwmhC0qe0ijZni2jB9Rcs8kQsW4lhTDQ/wMzmwFs/buotAWSnpmUp/dRWD2ufG3UYKA==} - engines: {node: '>= 20'} + '@vscode/vsce@4.0.0': + resolution: {integrity: sha512-NImwuLaenMmb5D5Jer9/lzi/F9ZQUBOp8Azhj/BVYcTFgixv8KehFXqEUDjQlD2tAiw2E6dDGyjTuAB//di60A==} + engines: {node: '>= 22'} hasBin: true acorn-jsx@5.3.2: @@ -1334,25 +1337,6 @@ packages: ajv@6.15.0: resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} - ajv@8.20.0: - resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} - - ansi-escapes@7.3.0: - resolution: {integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==} - engines: {node: '>=18'} - - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - ansi-regex@6.3.0: - resolution: {integrity: sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ==} - engines: {node: '>=12'} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - ansi-styles@7.0.0: resolution: {integrity: sha512-kKvt3m4uwzqL0wlkPd09CmljPJGOZZ4D0fP65sqFSvPkMRKhNi+74MgIJ5QxE6SxqB4t4KyUFGg8+n5zjo6hew==} engines: {node: '>=22'} @@ -1384,17 +1368,10 @@ packages: resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} engines: {node: '>= 0.4'} - astral-regex@2.0.0: - resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} - engines: {node: '>=8'} - async-function@1.0.0: resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} engines: {node: '>= 0.4'} - asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - available-typed-arrays@1.0.7: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} @@ -1409,9 +1386,6 @@ packages: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} - base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - before-after-hook@4.0.0: resolution: {integrity: sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==} @@ -1419,35 +1393,22 @@ packages: resolution: {integrity: sha512-sXnYK/Ij80TO3lcqZVV2YgfKN5QjUWIRk/XSm2J/4bd/lPko3lvk0O4ZppH6m+6hB2/GTu+ptNwVFe1xh+QLQw==} engines: {node: '>=4'} - bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - - boolbase@1.0.0: - resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - boundary@2.0.0: resolution: {integrity: sha512-rJKn5ooC9u8q13IMCrW0RSp31pxBCHE3y9V/tp3TdWSLf8Em3p6Di4NBpfzbJge9YjjFEsD0RtFEjtvHL5VyEA==} - brace-expansion@1.1.18: - resolution: {integrity: sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==} + brace-expansion@1.1.21: + resolution: {integrity: sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==} - brace-expansion@5.0.9: - resolution: {integrity: sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==} + brace-expansion@5.0.12: + resolution: {integrity: sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==} engines: {node: 20 || >=22} - braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} - buffer-crc32@0.2.13: resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} buffer-equal-constant-time@1.0.1: resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} - buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - bufferutil@4.1.0: resolution: {integrity: sha512-ZMANVnAixE6AWWnPzlW2KpUrxhm9woycYvPOo67jWHyFowASTEd9s+QN1EIMsSDtwhIxN4sWE1jotpuDUIgyIw==} engines: {node: '>=6.14.2'} @@ -1471,14 +1432,6 @@ packages: resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} engines: {node: '>= 0.4'} - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - - chalk@5.6.2: - resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - chalk@6.0.0: resolution: {integrity: sha512-2uNTXIuTTxk7ciZgAU1BQcgnchcG0xXnrs6jzkQfj9SsRa9M2s5zE8WT96hS6KmG4MzWHSrvH43DF1m4XRkrFg==} engines: {node: '>=22'} @@ -1486,16 +1439,6 @@ packages: chardet@2.2.0: resolution: {integrity: sha512-rddelWYNPRrXq6PtNEN2S3f6t9ILzvqaN5pVgi4kqt9jHQaXIial9PznB5iSPVlQSLNaaH22ItWz3EJtQ10+OA==} - cheerio-select@2.1.0: - resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} - - cheerio@1.2.0: - resolution: {integrity: sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==} - engines: {node: '>=20.18.1'} - - chownr@1.1.4: - resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} - cli-width@4.1.0: resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} engines: {node: '>= 12'} @@ -1509,20 +1452,9 @@ packages: resolution: {integrity: sha512-gfrHV6ZPkquExvMh9IOkKsBzNDk6sDuZ6DdBGUBkvFnTCqCxzpuq48RySgP0AnaqQkw2zynOFj9yly6T1Q2G5Q==} engines: {node: '>=16'} - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - commander@12.1.0: resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} engines: {node: '>=18'} @@ -1530,21 +1462,14 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - content-type@3.1.0: - resolution: {integrity: sha512-z26wZR7iXahgpSK7XgnB4IbRVmUNSODvsX9qC9TAru7AcWGiqn5YKy+OH3PLRrwyAnewykKhCqnD+VV3a8uT8Q==} + content-type@3.1.1: + resolution: {integrity: sha512-GW4qUsfFo59d0HbUibDlWv5wPz+vAAcaTWbKIuKCf0JkC7wWkSyf8f13IpXn5JkeMlB2P8iTSSIjwXljorg2vA==} engines: {node: '>=22'} cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} - css-select@5.2.2: - resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} - - css-what@6.2.2: - resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} - engines: {node: '>= 6'} - data-view-buffer@1.0.2: resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} engines: {node: '>= 0.4'} @@ -1574,14 +1499,6 @@ packages: supports-color: optional: true - decompress-response@6.0.0: - resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} - engines: {node: '>=10'} - - deep-extend@0.6.0: - resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} - engines: {node: '>=4.0.0'} - deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -1605,31 +1522,10 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} - delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - - detect-libc@2.1.2: - resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} - engines: {node: '>=8'} - doctrine@2.1.0: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} - dom-serializer@2.0.0: - resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} - - domelementtype@2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - - domhandler@5.0.3: - resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} - engines: {node: '>= 4'} - - domutils@3.2.2: - resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} - dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -1641,38 +1537,9 @@ packages: resolution: {integrity: sha512-UgGlf8IW75je7HZjNDpJdCv4cGJWIi6yumFdZ0R7A8/CIhQiWUjyGLCxdHpd8bmyD1gnkfUNK0oeOXqUS2cpfQ==} engines: {ecmascript: '>= es5', node: '>=4'} - emnapi@1.11.3: - resolution: {integrity: sha512-+/ZS90YK/rYfVOHtGLHkGffVsnmD/MAKaBHio+Y4XAtg75RLr4cveV/w0jTkUdLM1CcAlaRgG76mpIemWAlk0A==} - peerDependencies: - node-addon-api: '>= 6.1.0' - peerDependenciesMeta: - node-addon-api: - optional: true - - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - encoding-sniffer@0.2.1: - resolution: {integrity: sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==} - - end-of-stream@1.4.5: - resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} - - entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} - - entities@6.0.1: - resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} - engines: {node: '>=0.12'} - - entities@7.0.1: - resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} - engines: {node: '>=0.12'} - - environment@1.1.0: - resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} - engines: {node: '>=18'} + entities@8.1.0: + resolution: {integrity: sha512-kxL7msIffSuh9aaFAMD7rxAIuTRMAHMeBtgHW2yUdWw732ZNh4MehkF2gdjvtdmikkaIP9bFDDJOPlsvm7avrA==} + engines: {node: '>=20.19.0'} es-abstract-get@1.0.0: resolution: {integrity: sha512-6PMWXpdhshVvFp+FoWYs1EvG1Nj0tvk0dZM+XcK0xMEM1czRVcP6ohqPWHy6qPagSpC8j4+p89WXlT+xXJs/fg==} @@ -1807,8 +1674,8 @@ packages: resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@10.10.0: - resolution: {integrity: sha512-NPXn6r5zl4uET1DAVPaOwzX3rut4c0wcmw3dWJAfOsTM5+TogXo0DDjz8pwm/hL8cyVNpHqeK4JpN0NjnyFFNw==} + eslint@10.11.0: + resolution: {integrity: sha512-P7a6UEEqb9G95MYAtqkmsTbVXIYyzIfl6NGOIJk162PaahFxFyeGcrlXYFSiagECg4sEm8IseJdZBKR3rx6MsQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: @@ -1837,20 +1704,12 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - expand-template@2.0.3: - resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} - engines: {node: '>=6'} - fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} fast-diff@1.3.0: resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} - fast-glob@3.3.3: - resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} - engines: {node: '>=8.6.0'} - fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} @@ -1863,15 +1722,9 @@ packages: fast-string-width@3.0.2: resolution: {integrity: sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==} - fast-uri@3.1.7: - resolution: {integrity: sha512-dOvZVzjdZdz7phd9v6jCbwxrBW3fK6n8Rc0CtdmM4bumzMnxywBYhuph6J819RRw/ku+rLbelwfMunktuzVVHg==} - fast-wrap-ansi@0.2.2: resolution: {integrity: sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==} - fastq@1.20.3: - resolution: {integrity: sha512-XKv5nnLs6nLF71NgiKJLIZFLkPyIEuOselLG7ujZnGrRfQK8HpvY+WqKhAJUAdLomwVHErVS4LfxFlPq0/FTAw==} - fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} engines: {node: '>=12.0.0'} @@ -1884,10 +1737,6 @@ packages: file-entry-cache@11.1.5: resolution: {integrity: sha512-+PFTHITI08JIGhnNpGNI8T8inUpgZfk3GNEqfT9R2zZV2iFXg3CvqzSl/uEhs7TSGujYRELEANyDvS8Fj7+S7Q==} - fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} - find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} @@ -1902,17 +1751,6 @@ packages: resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} engines: {node: '>= 0.4'} - form-data@4.0.6: - resolution: {integrity: sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==} - engines: {node: '>= 6'} - - fs-constants@1.0.0: - resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} - - fs-extra@11.4.0: - resolution: {integrity: sha512-EQsFzMUJkCKGr1ePqlYADkIUmHW1s3ZXr5Yqy6wbGrfUCphpl2maM/kyOIRA2HpP3AaFQTZXD4ldjek+nccddA==} - engines: {node: '>=14.14'} - function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} @@ -1939,29 +1777,14 @@ packages: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} - github-from-package@0.0.0: - resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} - - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - glob-parent@6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} - glob@13.0.6: - resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==} - engines: {node: 18 || 20 || >=22} - globalthis@1.0.4: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} - globby@14.1.0: - resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==} - engines: {node: '>=18'} - gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} @@ -1973,10 +1796,6 @@ packages: resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} engines: {node: '>= 0.4'} - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} @@ -2010,13 +1829,6 @@ packages: resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} engines: {node: '>=10'} - hosted-git-info@7.0.2: - resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} - engines: {node: ^16.14.0 || >=18.0.0} - - htmlparser2@10.1.0: - resolution: {integrity: sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==} - http-proxy-agent@7.0.2: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} @@ -2025,17 +1837,10 @@ packages: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} - iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - iconv-lite@0.7.3: resolution: {integrity: sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==} engines: {node: '>=0.10.0'} - ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -2048,16 +1853,6 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - index-to-position@1.2.0: - resolution: {integrity: sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==} - engines: {node: '>=18'} - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - internal-slot@1.1.0: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} @@ -2082,8 +1877,8 @@ packages: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - is-core-module@2.16.2: - resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==} + is-core-module@2.17.0: + resolution: {integrity: sha512-J/vG0zBCbIKOQFfufSwyXdMrsohyJIUNkrnmo6WZGzoM7tr/lsbfW5b2BvisL6zsyMzK9UxV9L6c7AoFbyXHOA==} engines: {node: '>= 0.4'} is-data-view@1.0.2: @@ -2111,10 +1906,6 @@ packages: resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} engines: {node: '>= 0.4'} - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - is-generator-function@1.1.2: resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} engines: {node: '>= 0.4'} @@ -2140,10 +1931,6 @@ packages: resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} engines: {node: '>= 0.4'} - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - is-regex@1.2.1: resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} engines: {node: '>= 0.4'} @@ -2198,15 +1985,8 @@ packages: resolution: {integrity: sha512-5mbUj3SiZXCuRf9fT3ibzbSSEWiy63gFfksmGfdOzujPjW3k+z8WvIBxcJHBoQNlaZaiyB25deviif2+osLmLw==} engines: {node: '>=4'} - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - js-yaml@4.3.2: - resolution: {integrity: sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==} - hasBin: true - - js-yaml@5.4.1: - resolution: {integrity: sha512-28R/k+NAjeuf7+CKlTxWZVExJGwVVLwY06DgEnOMz2gEpfNkDcD7QvyiVPT0xy0XXhU8vHsd4Ot42OOPdJG7dQ==} + js-yaml@5.4.2: + resolution: {integrity: sha512-m+aqu+LwO1O6sIopafj8HUVl5aawITwZQe/yHpMCKjaWBaA/d07B/QdMb3529REftiU+RMMHL3Vlsw3hON7vWg==} hasBin: true json-parse-even-better-errors@6.0.0: @@ -2216,9 +1996,6 @@ packages: json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} @@ -2229,17 +2006,9 @@ packages: resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} hasBin: true - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - jsonc-parser@3.3.1: resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} - jsonfile@6.2.1: - resolution: {integrity: sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==} - jsonwebtoken@9.0.3: resolution: {integrity: sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==} engines: {node: '>=12', npm: '>=6'} @@ -2250,23 +2019,13 @@ packages: jws@4.0.1: resolution: {integrity: sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==} - keytar@7.9.0: - resolution: {integrity: sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==} - keyv@5.6.0: resolution: {integrity: sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==} - leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} - levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - linkify-it@5.0.2: - resolution: {integrity: sha512-ONTm2jCMAVZjgQa/Fy1kScXsuOoF5NPTsoFBdE1KVIZ2vAh/r9+Bqo+0jINCBYnavTPQZz38QzFTme79ENoN3Q==} - locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} @@ -2292,63 +2051,28 @@ packages: lodash.once@4.1.1: resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} - lodash.truncate@4.4.2: - resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} - - lodash@4.18.1: - resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} - - lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - - lru-cache@11.5.2: - resolution: {integrity: sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==} - engines: {node: 20 || >=22} - lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} - markdown-it@14.3.2: - resolution: {integrity: sha512-sHHjZ5fJKlgrG4qns2YwVcdNep35h5fERrfkD2YNsb9UFk0UIHarbiTaHKVMlPuWAoiilyK8Fv/jAm11slsY7Q==} + marked@18.0.13: + resolution: {integrity: sha512-xTxVzZsBFwunP6HDmtBkabUQEYArnP7/rMDGmPj9SlrKlQ4i8MdYVow+nJL0eOqwpUqhzBoTBRADGN6uYwPyOw==} + engines: {node: '>= 20'} hasBin: true math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} - mdurl@2.1.0: - resolution: {integrity: sha512-1+HBaOx0zi/dQWht8rNv9MYf9qqpqL/kxI0hXImU6Y547zM6Sni8BQibt7ifgMcYtQg41ao3Ivd6cnSM86inpg==} - memorystream@0.3.1: resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} engines: {node: '>= 0.10.0'} - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} - - mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - - mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - mime@1.6.0: resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} engines: {node: '>=4'} hasBin: true - mimic-response@3.1.0: - resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} - engines: {node: '>=10'} - minimatch@10.2.6: resolution: {integrity: sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==} engines: {node: 18 || 20 || >=22} @@ -2359,13 +2083,6 @@ packages: minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - minipass@7.1.3: - resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} - engines: {node: '>=16 || 14 >=14.17'} - - mkdirp-classic@0.5.3: - resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -2376,19 +2093,9 @@ packages: resolution: {integrity: sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw==} engines: {node: ^20.17.0 || >=22.9.0} - napi-build-utils@2.0.0: - resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==} - natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - node-abi@3.96.0: - resolution: {integrity: sha512-rebQ/lz7i0EkoLzUVSrKRzA69zMkwLp95kKMWoMDkkM00Suxz0D7zEQPwRml5fQum24mj7bPvmlgLAmu2JCiYg==} - engines: {node: '>=10'} - - node-addon-api@4.3.0: - resolution: {integrity: sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==} - node-exports-info@1.6.2: resolution: {integrity: sha512-kXs9Go0cah0qHVV2v389IXQLdLCeE1xfFtjOAF+iobu0OIoG1pje8At2vMHyaPMiPMnG/LWP50twML21eMcAag==} engines: {node: '>= 0.4'} @@ -2397,14 +2104,6 @@ packages: resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} hasBin: true - node-sarif-builder@3.4.0: - resolution: {integrity: sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==} - engines: {node: '>=20'} - - normalize-package-data@6.0.2: - resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} - engines: {node: ^16.14.0 || >=18.0.0} - npm-normalize-package-bin@6.0.0: resolution: {integrity: sha512-tdt4aFn9QamlhdN3HV2D2ccpBwO5/fyjjbXUxYA6uBjyekMZcZvDq0aSj9t5Jo+tih6AYFnt/cuIRn9013e0Uw==} engines: {node: ^22.22.2 || ^24.15.0 || >=26.0.0} @@ -2414,9 +2113,6 @@ packages: engines: {node: ^22.22.2 || ^24.15.0 || >=26.0.0, npm: '>= 10'} hasBin: true - nth-check@2.1.1: - resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - object-inspect@1.13.4: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} @@ -2445,13 +2141,10 @@ packages: resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} engines: {node: '>= 0.4'} - obug@2.2.1: - resolution: {integrity: sha512-XrsrhT5sybtKI6wakr2SPOlGZWWYbUXZ7a0jT8/QOeAPau+1X/bSegNe5YR75oJmEZQbKningirmGOEJCIk61Q==} + obug@3.0.0: + resolution: {integrity: sha512-5vvB5+W7ePv+p3uqxi+RcW1XAzLW0/hxt3/4X4Lc4qHudzOhmBiBwOY6DRob4WnanAEGvNcLjF+KNOufrUoEQw==} engines: {node: '>=12.20.0'} - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - open@10.2.0: resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} engines: {node: '>=18'} @@ -2472,25 +2165,8 @@ packages: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} - p-map@7.0.7: - resolution: {integrity: sha512-VaWRu2i4FJNRtiRWCuuQRgfQ1B7a6+gMSrO+3j0EQi/k0ULfS9kosRxGoiqwzIjZTDI02tGfk5mXXltLg6QtfQ==} - engines: {node: '>=18'} - - parse-json@8.3.0: - resolution: {integrity: sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==} - engines: {node: '>=18'} - - parse-semver@1.1.1: - resolution: {integrity: sha512-Eg1OuNntBMH0ojvEKSrvDSnwLmvVuUOSdylH/pSCPNMIspLlweJyIWXCE+k/5hm3cj/EBUYwmWkjhBALNP4LXQ==} - - parse5-htmlparser2-tree-adapter@7.1.0: - resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} - - parse5-parser-stream@7.1.2: - resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==} - - parse5@7.3.0: - resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + parse5@8.0.1: + resolution: {integrity: sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==} path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} @@ -2503,24 +2179,9 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-scurry@2.0.2: - resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} - engines: {node: 18 || 20 || >=22} - - path-type@6.0.0: - resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} - engines: {node: '>=18'} - pend@1.2.0: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} - picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - - picomatch@2.3.2: - resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} - engines: {node: '>=8.6'} - picomatch@4.0.7: resolution: {integrity: sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==} engines: {node: '>=12'} @@ -2530,23 +2191,10 @@ packages: engines: {node: '>=18'} hasBin: true - pluralize@2.0.0: - resolution: {integrity: sha512-TqNZzQCD4S42De9IfnnBvILN7HAW7riLqsCyp8lgjXeysyPlX5HhqKAcJHHHb9XskE4/a+7VGC9zzx8Ls0jOAw==} - - pluralize@8.0.0: - resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} - engines: {node: '>=4'} - possible-typed-array-names@1.1.0: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} - prebuild-install@7.1.3: - resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==} - engines: {node: '>=10'} - deprecated: No longer maintained. Please contact the author of the relevant native addon; alternatives are available. - hasBin: true - prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -2555,17 +2203,13 @@ packages: resolution: {integrity: sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==} engines: {node: '>=6.0.0'} - prettier@3.9.6: - resolution: {integrity: sha512-OpN0zzVdiaiAhxpuuj5efpIS4sY9j7bY6uR5mnj5yPzGkdkjNKSJeUThPb60Jw29QuAZgA4o+/iB49kFiaBX6g==} + prettier@3.9.8: + resolution: {integrity: sha512-WRFq3Wn3WId7LLROfMLdH7xaFr2jR62wU8nLO6rQUOLOxNZUviyJQs1M0iIhLexSFy+L+w0ch66wtoO2jRjG0A==} engines: {node: '>=14'} hasBin: true - pump@3.0.4: - resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==} - - punycode.js@2.3.1: - resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} - engines: {node: '>=6'} + proper-lockfile@4.1.2: + resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} @@ -2579,32 +2223,14 @@ packages: resolution: {integrity: sha512-h6fhOIaRrID2CbEY2fqs+7t+UXZo+MLAnU5gRIq85uFtdiUPCdsApMlHhXogKVM4HM2DVbIjGNTTYH2OcmP1vA==} engines: {node: '>=0.6'} - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - rc-config-loader@4.1.4: - resolution: {integrity: sha512-3GiwEzklkbXTDp52UR5nT8iXgYAx1V9ZG/kDZT7p60u2GCv2XTwQq4NzinMoMpNtXhmt3WkhYXcj6HH8HdwCEQ==} - - rc@1.2.8: - resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} - hasBin: true - read-package-json-fast@6.0.0: resolution: {integrity: sha512-PNaGjoCnw9DBA2Kl8D+8po957z778q/HOPuY2u3Bkw/JO3eC8MDx7jn/PgMtSgpcBbs+6UOjDbwReGpXmRvs0g==} engines: {node: ^22.22.2 || ^24.15.0 || >=26.0.0} - read-pkg@9.0.1: - resolution: {integrity: sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==} - engines: {node: '>=18'} - read@1.0.7: resolution: {integrity: sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==} engines: {node: '>=0.8'} - readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} - reflect.getprototypeof@1.0.10: resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} engines: {node: '>= 0.4'} @@ -2617,10 +2243,6 @@ packages: resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} engines: {node: '>=8'} - require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - resolve@1.22.12: resolution: {integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==} engines: {node: '>= 0.4'} @@ -2631,17 +2253,14 @@ packages: engines: {node: '>= 0.4'} hasBin: true - reusify@1.1.0: - resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} run-applescript@7.1.0: resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} engines: {node: '>=18'} - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - safe-array-concat@1.1.4: resolution: {integrity: sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==} engines: {node: '>=0.4'} @@ -2664,15 +2283,6 @@ packages: resolution: {integrity: sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==} engines: {node: '>=11.0.0'} - secretlint@10.2.2: - resolution: {integrity: sha512-xVpkeHV/aoWe4vP4TansF622nBEImzCY73y/0042DuJ29iKIaqgoJ8fGxre3rVSHHbxar4FdJobmTnLp9AU0eg==} - engines: {node: '>=20.0.0'} - hasBin: true - - semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true - semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -2722,44 +2332,17 @@ packages: resolution: {integrity: sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==} engines: {node: '>= 0.4'} + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} - simple-concat@1.0.1: - resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} - - simple-get@4.0.1: - resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} - - slash@5.1.0: - resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} - engines: {node: '>=14.16'} - - slice-ansi@4.0.0: - resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} - engines: {node: '>=10'} - - spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} - - spdx-exceptions@2.5.0: - resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} - - spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} - - spdx-license-ids@3.0.23: - resolution: {integrity: sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==} - stop-iteration-iterator@1.1.0: resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} engines: {node: '>= 0.4'} - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - string.prototype.trim@1.2.11: resolution: {integrity: sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w==} engines: {node: '>= 0.4'} @@ -2772,36 +2355,13 @@ packages: resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} engines: {node: '>= 0.4'} - string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - strip-ansi@7.2.0: - resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} - engines: {node: '>=12'} - strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} - strip-json-comments@2.0.1: - resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} - engines: {node: '>=0.10.0'} - structured-source@4.0.0: resolution: {integrity: sha512-qGzRFNJDjFieQkl/sVOI2dUjHKRyL9dAJi2gCPGJLbJHBIkyOHxjuocpIEfbLioX+qSJpvbYdT49/YCdMznKxA==} - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - - supports-hyperlinks@3.2.0: - resolution: {integrity: sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==} - engines: {node: '>=14.18'} - supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} @@ -2810,24 +2370,6 @@ packages: resolution: {integrity: sha512-eNRKgb3z66Yp3D2CixVujOUvXLFUTij/zVnV8KRyvFdQwpz7I5DS8UfRkTeLzb64u+dkzDSdelE24izu+zSSUg==} engines: {node: ^14.18.0 || >=16.0.0} - table@6.9.0: - resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} - engines: {node: '>=10.0.0'} - - tar-fs@2.1.5: - resolution: {integrity: sha512-OboTd8mmMhZDNPV+UjQcK9yKAatXu2aJ+r1w4im1Otd4M4fl2hwvdoXUxIYHFTHWK/3y3FarBP70v3vwmGlOxw==} - - tar-stream@2.2.0: - resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} - engines: {node: '>=6'} - - terminal-link@4.0.0: - resolution: {integrity: sha512-lk+vH+MccxNqgVqSnkMVKx4VLJfnLjDBGzH16JVZjKE2DoxP57s6/vt6JmXV5I3jBcfGrxNrYtC+mPtU7WJztA==} - engines: {node: '>=18'} - - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - textextensions@6.11.0: resolution: {integrity: sha512-tXJwSr9355kFJI3lbCkPpUH5cP8/M0GGy2xLO34aZCjMXBaK3SoPnZwr/oWmo1FdCnELcs4npdCIOFtq9W3ruQ==} engines: {node: '>=4'} @@ -2836,14 +2378,6 @@ packages: resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} engines: {node: '>=12.0.0'} - tmp@0.2.7: - resolution: {integrity: sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw==} - engines: {node: '>=14.14'} - - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - ts-api-utils@2.5.0: resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} engines: {node: '>=18.12'} @@ -2856,9 +2390,6 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tunnel-agent@0.6.0: - resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} - tunnel@0.0.6: resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'} @@ -2870,10 +2401,6 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - type-fest@4.41.0: - resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} - engines: {node: '>=16'} - typed-array-buffer@1.0.3: resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} engines: {node: '>= 0.4'} @@ -2882,8 +2409,8 @@ packages: resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} engines: {node: '>= 0.4'} - typed-array-byte-offset@1.0.4: - resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} + typed-array-byte-offset@1.0.5: + resolution: {integrity: sha512-0FHJvLPqZ7KJzp17O13jfsAjsqazgrxBu2zEK95PmUz8lv2+GjRuxUInCr2Rk9Dms3ihN21zJ929ZO43yJ95QQ==} engines: {node: '>= 0.4'} typed-array-length@1.0.8: @@ -2910,9 +2437,6 @@ packages: engines: {node: '>=16.20.0'} hasBin: true - uc.micro@2.1.0: - resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} - unbox-primitive@1.1.0: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} @@ -2923,50 +2447,19 @@ packages: undici-types@8.9.0: resolution: {integrity: sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==} - undici@7.29.1: - resolution: {integrity: sha512-RYONW2MeafgYlkVOKYKkA/Ag7BmXqgIWCa8t1m0JcxrQg9pI9lEqRhAOruOBCbAohOa/gkCF+iPi9hrgvTzu6Q==} - engines: {node: '>=20.18.1'} - - unicorn-magic@0.1.0: - resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} - engines: {node: '>=18'} - - unicorn-magic@0.3.0: - resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} - engines: {node: '>=18'} - universal-user-agent@7.0.3: resolution: {integrity: sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==} - universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} - uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} url-join@4.0.1: resolution: {integrity: sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==} - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - - validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - version-range@4.15.0: resolution: {integrity: sha512-Ck0EJbAGxHwprkzFO966t4/5QkRuzh+/I1RxhLgUKKwEn+Cd8NwM60mE3AqBZg5gYODoXW0EFsQvbZjRlvdqbg==} engines: {node: '>=4'} - whatwg-encoding@3.1.1: - resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} - engines: {node: '>=18'} - deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation - - whatwg-mimetype@4.0.0: - resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} - engines: {node: '>=18'} - which-boxed-primitive@1.1.1: resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} engines: {node: '>= 0.4'} @@ -2979,8 +2472,8 @@ packages: resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} engines: {node: '>= 0.4'} - which-typed-array@1.1.22: - resolution: {integrity: sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==} + which-typed-array@1.1.24: + resolution: {integrity: sha512-wk4Mf4pR5mRP7eYuuTBCIQ9d0ud2Fv2jRLQpfgnRjbOxAFHmjKFValgTpitVKzJJS8ajnYQV2Du1SZ8j6b/EUQ==} engines: {node: '>= 0.4'} which@2.0.2: @@ -2997,9 +2490,6 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - wsl-utils@0.1.0: resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} engines: {node: '>=18'} @@ -3028,46 +2518,40 @@ packages: snapshots: - '@azu/format-text@1.0.2': {} - - '@azu/style-format@1.0.1': - dependencies: - '@azu/format-text': 1.0.2 - '@azure/abort-controller@2.2.0': dependencies: tslib: 2.8.1 - '@azure/core-auth@1.11.0(supports-color@7.2.0)': + '@azure/core-auth@1.11.0': dependencies: '@azure/abort-controller': 2.2.0 - '@azure/core-util': 1.14.0(supports-color@7.2.0) + '@azure/core-util': 1.14.0 tslib: 2.8.1 transitivePeerDependencies: - supports-color - '@azure/core-client@1.11.1(supports-color@7.2.0)': + '@azure/core-client@1.11.1': dependencies: '@azure/abort-controller': 2.2.0 - '@azure/core-auth': 1.11.0(supports-color@7.2.0) - '@azure/core-rest-pipeline': 1.25.0(supports-color@7.2.0) + '@azure/core-auth': 1.11.0 + '@azure/core-rest-pipeline': 1.25.0 '@azure/core-tracing': 1.4.0 - '@azure/core-util': 1.14.0(supports-color@7.2.0) - '@azure/logger': 1.4.0(supports-color@7.2.0) + '@azure/core-util': 1.14.0 + '@azure/logger': 1.4.0 tslib: 2.8.1 transitivePeerDependencies: - supports-color '@azure/core-process@1.0.0': {} - '@azure/core-rest-pipeline@1.25.0(supports-color@7.2.0)': + '@azure/core-rest-pipeline@1.25.0': dependencies: '@azure/abort-controller': 2.2.0 - '@azure/core-auth': 1.11.0(supports-color@7.2.0) + '@azure/core-auth': 1.11.0 '@azure/core-tracing': 1.4.0 - '@azure/core-util': 1.14.0(supports-color@7.2.0) - '@azure/logger': 1.4.0(supports-color@7.2.0) - '@typespec/ts-http-runtime': 0.3.9(supports-color@7.2.0) + '@azure/core-util': 1.14.0 + '@azure/logger': 1.4.0 + '@typespec/ts-http-runtime': 0.3.9 tslib: 2.8.1 transitivePeerDependencies: - supports-color @@ -3076,59 +2560,49 @@ snapshots: dependencies: tslib: 2.8.1 - '@azure/core-util@1.14.0(supports-color@7.2.0)': + '@azure/core-util@1.14.0': dependencies: '@azure/abort-controller': 2.2.0 - '@typespec/ts-http-runtime': 0.3.9(supports-color@7.2.0) + '@typespec/ts-http-runtime': 0.3.9 tslib: 2.8.1 transitivePeerDependencies: - supports-color - '@azure/identity@4.13.2(supports-color@7.2.0)': + '@azure/identity@4.13.3': dependencies: '@azure/abort-controller': 2.2.0 - '@azure/core-auth': 1.11.0(supports-color@7.2.0) - '@azure/core-client': 1.11.1(supports-color@7.2.0) + '@azure/core-auth': 1.11.0 + '@azure/core-client': 1.11.1 '@azure/core-process': 1.0.0 - '@azure/core-rest-pipeline': 1.25.0(supports-color@7.2.0) + '@azure/core-rest-pipeline': 1.25.0 '@azure/core-tracing': 1.4.0 - '@azure/core-util': 1.14.0(supports-color@7.2.0) - '@azure/logger': 1.4.0(supports-color@7.2.0) - '@azure/msal-browser': 5.21.0 - '@azure/msal-node': 5.6.0 + '@azure/core-util': 1.14.0 + '@azure/logger': 1.4.0 + '@azure/msal-browser': 5.22.0 + '@azure/msal-node': 6.0.1 open: 10.2.0 tslib: 2.8.1 transitivePeerDependencies: - supports-color - '@azure/logger@1.4.0(supports-color@7.2.0)': + '@azure/logger@1.4.0': dependencies: - '@typespec/ts-http-runtime': 0.3.9(supports-color@7.2.0) + '@typespec/ts-http-runtime': 0.3.9 tslib: 2.8.1 transitivePeerDependencies: - supports-color - '@azure/msal-browser@5.21.0': + '@azure/msal-browser@5.22.0': dependencies: - '@azure/msal-common': 16.14.0 - - '@azure/msal-common@16.13.0': {} + '@azure/msal-common': 16.14.1 - '@azure/msal-common@16.14.0': {} + '@azure/msal-common@16.14.1': {} - '@azure/msal-node@5.6.0': + '@azure/msal-node@6.0.1': dependencies: - '@azure/msal-common': 16.13.0 + '@azure/msal-common': 16.14.1 jsonwebtoken: 9.0.3 - '@babel/code-frame@7.29.7': - dependencies: - '@babel/helper-validator-identifier': 7.29.7 - js-tokens: 4.0.0 - picocolors: 1.1.1 - - '@babel/helper-validator-identifier@7.29.7': {} - '@cacheable/memory@2.2.0': dependencies: '@cacheable/utils': 2.5.0 @@ -3264,17 +2738,17 @@ snapshots: '@esbuild/win32-x64@0.28.2': optional: true - '@eslint-community/eslint-utils@4.10.1(eslint@10.10.0(supports-color@7.2.0))': + '@eslint-community/eslint-utils@4.10.1(eslint@10.11.0)': dependencies: - eslint: 10.10.0(supports-color@7.2.0) + eslint: 10.11.0 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} - '@eslint/config-array@0.23.5(supports-color@7.2.0)': + '@eslint/config-array@0.23.5': dependencies: '@eslint/object-schema': 3.0.5 - debug: 4.4.3(supports-color@7.2.0) + debug: 4.4.3 minimatch: 10.2.6 transitivePeerDependencies: - supports-color @@ -3287,9 +2761,9 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 - '@eslint/js@10.0.1(eslint@10.10.0(supports-color@7.2.0))': + '@eslint/js@10.0.1(eslint@10.11.0)': optionalDependencies: - eslint: 10.10.0(supports-color@7.2.0) + eslint: 10.11.0 '@eslint/object-schema@3.0.5': {} @@ -3316,122 +2790,122 @@ snapshots: '@inquirer/ansi@2.0.8': {} - '@inquirer/checkbox@5.2.5(@types/node@26.5.1)': + '@inquirer/checkbox@5.2.5(@types/node@26.6.2)': dependencies: '@inquirer/ansi': 2.0.8 - '@inquirer/core': 12.0.3(@types/node@26.5.1) + '@inquirer/core': 12.0.3(@types/node@26.6.2) '@inquirer/figures': 2.0.9 - '@inquirer/type': 4.1.1(@types/node@26.5.1) + '@inquirer/type': 4.1.1(@types/node@26.6.2) optionalDependencies: - '@types/node': 26.5.1 + '@types/node': 26.6.2 - '@inquirer/confirm@6.3.2(@types/node@26.5.1)': + '@inquirer/confirm@6.3.2(@types/node@26.6.2)': dependencies: - '@inquirer/core': 12.0.3(@types/node@26.5.1) - '@inquirer/type': 4.1.1(@types/node@26.5.1) + '@inquirer/core': 12.0.3(@types/node@26.6.2) + '@inquirer/type': 4.1.1(@types/node@26.6.2) optionalDependencies: - '@types/node': 26.5.1 + '@types/node': 26.6.2 - '@inquirer/core@12.0.3(@types/node@26.5.1)': + '@inquirer/core@12.0.3(@types/node@26.6.2)': dependencies: '@inquirer/ansi': 2.0.8 '@inquirer/figures': 2.0.9 - '@inquirer/type': 4.1.1(@types/node@26.5.1) + '@inquirer/type': 4.1.1(@types/node@26.6.2) cli-width: 4.1.0 fast-wrap-ansi: 0.2.2 mute-stream: 3.0.0 signal-exit: 4.1.0 optionalDependencies: - '@types/node': 26.5.1 + '@types/node': 26.6.2 - '@inquirer/editor@5.3.3(@types/node@26.5.1)': + '@inquirer/editor@5.3.3(@types/node@26.6.2)': dependencies: - '@inquirer/core': 12.0.3(@types/node@26.5.1) - '@inquirer/external-editor': 3.0.5(@types/node@26.5.1) - '@inquirer/type': 4.1.1(@types/node@26.5.1) + '@inquirer/core': 12.0.3(@types/node@26.6.2) + '@inquirer/external-editor': 3.0.5(@types/node@26.6.2) + '@inquirer/type': 4.1.1(@types/node@26.6.2) optionalDependencies: - '@types/node': 26.5.1 + '@types/node': 26.6.2 - '@inquirer/expand@5.1.5(@types/node@26.5.1)': + '@inquirer/expand@5.1.5(@types/node@26.6.2)': dependencies: - '@inquirer/core': 12.0.3(@types/node@26.5.1) - '@inquirer/type': 4.1.1(@types/node@26.5.1) + '@inquirer/core': 12.0.3(@types/node@26.6.2) + '@inquirer/type': 4.1.1(@types/node@26.6.2) optionalDependencies: - '@types/node': 26.5.1 + '@types/node': 26.6.2 - '@inquirer/external-editor@3.0.5(@types/node@26.5.1)': + '@inquirer/external-editor@3.0.5(@types/node@26.6.2)': dependencies: chardet: 2.2.0 iconv-lite: 0.7.3 optionalDependencies: - '@types/node': 26.5.1 + '@types/node': 26.6.2 '@inquirer/figures@2.0.9': {} - '@inquirer/input@5.1.6(@types/node@26.5.1)': + '@inquirer/input@5.1.6(@types/node@26.6.2)': dependencies: - '@inquirer/core': 12.0.3(@types/node@26.5.1) - '@inquirer/type': 4.1.1(@types/node@26.5.1) + '@inquirer/core': 12.0.3(@types/node@26.6.2) + '@inquirer/type': 4.1.1(@types/node@26.6.2) optionalDependencies: - '@types/node': 26.5.1 + '@types/node': 26.6.2 - '@inquirer/number@4.2.3(@types/node@26.5.1)': + '@inquirer/number@4.2.3(@types/node@26.6.2)': dependencies: - '@inquirer/core': 12.0.3(@types/node@26.5.1) - '@inquirer/type': 4.1.1(@types/node@26.5.1) + '@inquirer/core': 12.0.3(@types/node@26.6.2) + '@inquirer/type': 4.1.1(@types/node@26.6.2) optionalDependencies: - '@types/node': 26.5.1 + '@types/node': 26.6.2 - '@inquirer/password@5.2.2(@types/node@26.5.1)': + '@inquirer/password@5.2.2(@types/node@26.6.2)': dependencies: '@inquirer/ansi': 2.0.8 - '@inquirer/core': 12.0.3(@types/node@26.5.1) - '@inquirer/type': 4.1.1(@types/node@26.5.1) + '@inquirer/core': 12.0.3(@types/node@26.6.2) + '@inquirer/type': 4.1.1(@types/node@26.6.2) optionalDependencies: - '@types/node': 26.5.1 - - '@inquirer/prompts@8.7.2(@types/node@26.5.1)': - dependencies: - '@inquirer/checkbox': 5.2.5(@types/node@26.5.1) - '@inquirer/confirm': 6.3.2(@types/node@26.5.1) - '@inquirer/editor': 5.3.3(@types/node@26.5.1) - '@inquirer/expand': 5.1.5(@types/node@26.5.1) - '@inquirer/input': 5.1.6(@types/node@26.5.1) - '@inquirer/number': 4.2.3(@types/node@26.5.1) - '@inquirer/password': 5.2.2(@types/node@26.5.1) - '@inquirer/rawlist': 5.3.5(@types/node@26.5.1) - '@inquirer/search': 4.3.3(@types/node@26.5.1) - '@inquirer/select': 5.2.5(@types/node@26.5.1) + '@types/node': 26.6.2 + + '@inquirer/prompts@8.7.2(@types/node@26.6.2)': + dependencies: + '@inquirer/checkbox': 5.2.5(@types/node@26.6.2) + '@inquirer/confirm': 6.3.2(@types/node@26.6.2) + '@inquirer/editor': 5.3.3(@types/node@26.6.2) + '@inquirer/expand': 5.1.5(@types/node@26.6.2) + '@inquirer/input': 5.1.6(@types/node@26.6.2) + '@inquirer/number': 4.2.3(@types/node@26.6.2) + '@inquirer/password': 5.2.2(@types/node@26.6.2) + '@inquirer/rawlist': 5.3.5(@types/node@26.6.2) + '@inquirer/search': 4.3.3(@types/node@26.6.2) + '@inquirer/select': 5.2.5(@types/node@26.6.2) optionalDependencies: - '@types/node': 26.5.1 + '@types/node': 26.6.2 - '@inquirer/rawlist@5.3.5(@types/node@26.5.1)': + '@inquirer/rawlist@5.3.5(@types/node@26.6.2)': dependencies: - '@inquirer/core': 12.0.3(@types/node@26.5.1) - '@inquirer/type': 4.1.1(@types/node@26.5.1) + '@inquirer/core': 12.0.3(@types/node@26.6.2) + '@inquirer/type': 4.1.1(@types/node@26.6.2) optionalDependencies: - '@types/node': 26.5.1 + '@types/node': 26.6.2 - '@inquirer/search@4.3.3(@types/node@26.5.1)': + '@inquirer/search@4.3.3(@types/node@26.6.2)': dependencies: - '@inquirer/core': 12.0.3(@types/node@26.5.1) + '@inquirer/core': 12.0.3(@types/node@26.6.2) '@inquirer/figures': 2.0.9 - '@inquirer/type': 4.1.1(@types/node@26.5.1) + '@inquirer/type': 4.1.1(@types/node@26.6.2) optionalDependencies: - '@types/node': 26.5.1 + '@types/node': 26.6.2 - '@inquirer/select@5.2.5(@types/node@26.5.1)': + '@inquirer/select@5.2.5(@types/node@26.6.2)': dependencies: '@inquirer/ansi': 2.0.8 - '@inquirer/core': 12.0.3(@types/node@26.5.1) + '@inquirer/core': 12.0.3(@types/node@26.6.2) '@inquirer/figures': 2.0.9 - '@inquirer/type': 4.1.1(@types/node@26.5.1) + '@inquirer/type': 4.1.1(@types/node@26.6.2) optionalDependencies: - '@types/node': 26.5.1 + '@types/node': 26.6.2 - '@inquirer/type@4.1.1(@types/node@26.5.1)': + '@inquirer/type@4.1.1(@types/node@26.6.2)': optionalDependencies: - '@types/node': 26.5.1 + '@types/node': 26.6.2 '@keyv/bigmap@1.3.1(keyv@5.6.0)': dependencies: @@ -3441,24 +2915,23 @@ snapshots: '@keyv/serialize@1.1.1': {} - '@napi-rs/cli@3.9.1(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(@types/node@26.5.1)(emnapi@1.11.3)(supports-color@7.2.0)': + '@napi-rs/cli@3.10.4(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(@types/node@26.6.2)': dependencies: - '@inquirer/prompts': 8.7.2(@types/node@26.5.1) - '@napi-rs/cross-toolchain': 1.0.3(supports-color@7.2.0) + '@inquirer/prompts': 8.7.2(@types/node@26.6.2) + '@napi-rs/cross-toolchain': 1.0.3 '@napi-rs/wasm-tools': 1.1.0 '@octokit/rest': 22.0.1 clipanion: 4.0.0-rc.4(typanion@3.14.0) colorette: 2.0.20 es-toolkit: 1.52.0 - js-yaml: 5.4.1 - obug: 2.2.1 + js-yaml: 5.4.2 + obug: 3.0.0 semver: 7.8.5 typanion: 3.14.0 typescript: 6.0.3 optionalDependencies: '@emnapi/core': 1.11.3 '@emnapi/runtime': 1.11.3 - emnapi: 1.11.3 transitivePeerDependencies: - '@napi-rs/cross-toolchain-arm64-target-aarch64' - '@napi-rs/cross-toolchain-arm64-target-armv7' @@ -3473,14 +2946,65 @@ snapshots: - '@types/node' - supports-color - '@napi-rs/cross-toolchain@1.0.3(supports-color@7.2.0)': + '@napi-rs/cross-toolchain@1.0.3': dependencies: '@napi-rs/lzma': 1.5.1 '@napi-rs/tar': 1.1.1 - debug: 4.4.3(supports-color@7.2.0) + debug: 4.4.3 transitivePeerDependencies: - supports-color + '@napi-rs/keyring-darwin-arm64@1.3.0': + optional: true + + '@napi-rs/keyring-darwin-x64@1.3.0': + optional: true + + '@napi-rs/keyring-freebsd-x64@1.3.0': + optional: true + + '@napi-rs/keyring-linux-arm-gnueabihf@1.3.0': + optional: true + + '@napi-rs/keyring-linux-arm64-gnu@1.3.0': + optional: true + + '@napi-rs/keyring-linux-arm64-musl@1.3.0': + optional: true + + '@napi-rs/keyring-linux-riscv64-gnu@1.3.0': + optional: true + + '@napi-rs/keyring-linux-x64-gnu@1.3.0': + optional: true + + '@napi-rs/keyring-linux-x64-musl@1.3.0': + optional: true + + '@napi-rs/keyring-win32-arm64-msvc@1.3.0': + optional: true + + '@napi-rs/keyring-win32-ia32-msvc@1.3.0': + optional: true + + '@napi-rs/keyring-win32-x64-msvc@1.3.0': + optional: true + + '@napi-rs/keyring@1.3.0': + optionalDependencies: + '@napi-rs/keyring-darwin-arm64': 1.3.0 + '@napi-rs/keyring-darwin-x64': 1.3.0 + '@napi-rs/keyring-freebsd-x64': 1.3.0 + '@napi-rs/keyring-linux-arm-gnueabihf': 1.3.0 + '@napi-rs/keyring-linux-arm64-gnu': 1.3.0 + '@napi-rs/keyring-linux-arm64-musl': 1.3.0 + '@napi-rs/keyring-linux-riscv64-gnu': 1.3.0 + '@napi-rs/keyring-linux-x64-gnu': 1.3.0 + '@napi-rs/keyring-linux-x64-musl': 1.3.0 + '@napi-rs/keyring-win32-arm64-msvc': 1.3.0 + '@napi-rs/keyring-win32-ia32-msvc': 1.3.0 + '@napi-rs/keyring-win32-x64-msvc': 1.3.0 + '@napi-rs/lzma-android-arm-eabi@1.5.1': optional: true @@ -3631,14 +3155,14 @@ snapshots: dependencies: '@emnapi/core': 1.11.2 '@emnapi/runtime': 1.11.2 - '@tybys/wasm-util': 0.10.3 + '@tybys/wasm-util': 0.10.4 optional: true '@napi-rs/wasm-runtime@1.2.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': dependencies: '@emnapi/core': 1.9.2 '@emnapi/runtime': 1.9.2 - '@tybys/wasm-util': 0.10.3 + '@tybys/wasm-util': 0.10.4 optional: true '@napi-rs/wasm-tools-android-arm-eabi@1.1.0': @@ -3700,18 +3224,6 @@ snapshots: '@napi-rs/wasm-tools-win32-ia32-msvc': 1.1.0 '@napi-rs/wasm-tools-win32-x64-msvc': 1.1.0 - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - '@nodelib/fs.stat@2.0.5': {} - - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.20.3 - '@octokit/auth-token@6.0.0': {} '@octokit/core@7.0.8': @@ -3762,7 +3274,7 @@ snapshots: '@octokit/endpoint': 11.0.5 '@octokit/request-error': 7.1.2 '@octokit/types': 18.0.0 - content-type: 3.1.0 + content-type: 3.1.1 json-with-bigint: 3.5.12 universal-user-agent: 7.0.3 @@ -3785,67 +3297,17 @@ snapshots: '@rtsao/scc@1.1.0': {} - '@secretlint/config-creator@10.2.2': - dependencies: - '@secretlint/types': 10.2.2 - - '@secretlint/config-loader@10.2.2(supports-color@7.2.0)': - dependencies: - '@secretlint/profiler': 10.2.2 - '@secretlint/resolver': 10.2.2 - '@secretlint/types': 10.2.2 - ajv: 8.20.0 - debug: 4.4.3(supports-color@7.2.0) - rc-config-loader: 4.1.4(supports-color@7.2.0) - transitivePeerDependencies: - - supports-color - - '@secretlint/core@10.2.2(supports-color@7.2.0)': + '@secretlint/core@10.2.2': dependencies: '@secretlint/profiler': 10.2.2 '@secretlint/types': 10.2.2 - debug: 4.4.3(supports-color@7.2.0) + debug: 4.4.3 structured-source: 4.0.0 transitivePeerDependencies: - supports-color - '@secretlint/formatter@10.2.2(supports-color@7.2.0)': - dependencies: - '@secretlint/resolver': 10.2.2 - '@secretlint/types': 10.2.2 - '@textlint/linter-formatter': 15.8.0(supports-color@7.2.0) - '@textlint/module-interop': 15.8.0 - '@textlint/types': 15.8.0 - chalk: 5.6.2 - debug: 4.4.3(supports-color@7.2.0) - pluralize: 8.0.0 - strip-ansi: 7.2.0 - table: 6.9.0 - terminal-link: 4.0.0 - transitivePeerDependencies: - - supports-color - - '@secretlint/node@10.2.2(supports-color@7.2.0)': - dependencies: - '@secretlint/config-loader': 10.2.2(supports-color@7.2.0) - '@secretlint/core': 10.2.2(supports-color@7.2.0) - '@secretlint/formatter': 10.2.2(supports-color@7.2.0) - '@secretlint/profiler': 10.2.2 - '@secretlint/source-creator': 10.2.2 - '@secretlint/types': 10.2.2 - debug: 4.4.3(supports-color@7.2.0) - p-map: 7.0.7 - transitivePeerDependencies: - - supports-color - '@secretlint/profiler@10.2.2': {} - '@secretlint/resolver@10.2.2': {} - - '@secretlint/secretlint-formatter-sarif@10.2.2': - dependencies: - node-sarif-builder: 3.4.0 - '@secretlint/secretlint-rule-no-dotenv@10.2.2': dependencies: '@secretlint/types': 10.2.2 @@ -3859,37 +3321,7 @@ snapshots: '@secretlint/types@10.2.2': {} - '@sindresorhus/merge-streams@2.3.0': {} - - '@textlint/ast-node-types@15.8.0': {} - - '@textlint/linter-formatter@15.8.0(supports-color@7.2.0)': - dependencies: - '@azu/format-text': 1.0.2 - '@azu/style-format': 1.0.1 - '@textlint/module-interop': 15.8.0 - '@textlint/resolver': 15.8.0 - '@textlint/types': 15.8.0 - debug: 4.4.3(supports-color@7.2.0) - js-yaml: 4.3.2 - lodash: 4.18.1 - pluralize: 2.0.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - table: 6.9.0 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - - '@textlint/module-interop@15.8.0': {} - - '@textlint/resolver@15.8.0': {} - - '@textlint/types@15.8.0': - dependencies: - '@textlint/ast-node-types': 15.8.0 - - '@tybys/wasm-util@0.10.3': + '@tybys/wasm-util@0.10.4': dependencies: tslib: 2.8.1 @@ -3903,25 +3335,21 @@ snapshots: '@types/json5@0.0.29': {} - '@types/node@26.5.1': + '@types/node@26.6.2': dependencies: undici-types: 8.9.0 - '@types/normalize-package-data@2.4.4': {} - - '@types/sarif@2.1.7': {} - '@types/vscode@1.61.0': {} - '@typescript-eslint/eslint-plugin@8.70.0(@typescript-eslint/parser@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@7.2.0))(supports-color@7.2.0))(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@7.2.0))(supports-color@7.2.0)': + '@typescript-eslint/eslint-plugin@8.70.0(@typescript-eslint/parser@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.11.0))(@typescript/typescript6@6.0.2)(eslint@10.11.0)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.70.0(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@7.2.0))(supports-color@7.2.0) + '@typescript-eslint/parser': 8.70.0(@typescript/typescript6@6.0.2)(eslint@10.11.0) '@typescript-eslint/scope-manager': 8.70.0 - '@typescript-eslint/type-utils': 8.70.0(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@7.2.0))(supports-color@7.2.0) - '@typescript-eslint/utils': 8.70.0(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@7.2.0))(supports-color@7.2.0) + '@typescript-eslint/type-utils': 8.70.0(@typescript/typescript6@6.0.2)(eslint@10.11.0) + '@typescript-eslint/utils': 8.70.0(@typescript/typescript6@6.0.2)(eslint@10.11.0) '@typescript-eslint/visitor-keys': 8.70.0 - eslint: 10.10.0(supports-color@7.2.0) + eslint: 10.11.0 ignore: 7.0.9 natural-compare: 1.4.0 ts-api-utils: 2.5.0(@typescript/typescript6@6.0.2) @@ -3929,23 +3357,23 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@7.2.0))(supports-color@7.2.0)': + '@typescript-eslint/parser@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.11.0)': dependencies: '@typescript-eslint/scope-manager': 8.70.0 '@typescript-eslint/types': 8.70.0 - '@typescript-eslint/typescript-estree': 8.70.0(@typescript/typescript6@6.0.2)(supports-color@7.2.0) + '@typescript-eslint/typescript-estree': 8.70.0(@typescript/typescript6@6.0.2) '@typescript-eslint/visitor-keys': 8.70.0 - debug: 4.4.3(supports-color@7.2.0) - eslint: 10.10.0(supports-color@7.2.0) + debug: 4.4.3 + eslint: 10.11.0 typescript: '@typescript/typescript6@6.0.2' transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.70.0(@typescript/typescript6@6.0.2)(supports-color@7.2.0)': + '@typescript-eslint/project-service@8.70.0(@typescript/typescript6@6.0.2)': dependencies: '@typescript-eslint/tsconfig-utils': 8.70.0(@typescript/typescript6@6.0.2) '@typescript-eslint/types': 8.70.0 - debug: 4.4.3(supports-color@7.2.0) + debug: 4.4.3 typescript: '@typescript/typescript6@6.0.2' transitivePeerDependencies: - supports-color @@ -3959,13 +3387,13 @@ snapshots: dependencies: typescript: '@typescript/typescript6@6.0.2' - '@typescript-eslint/type-utils@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@7.2.0))(supports-color@7.2.0)': + '@typescript-eslint/type-utils@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.11.0)': dependencies: '@typescript-eslint/types': 8.70.0 - '@typescript-eslint/typescript-estree': 8.70.0(@typescript/typescript6@6.0.2)(supports-color@7.2.0) - '@typescript-eslint/utils': 8.70.0(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@7.2.0))(supports-color@7.2.0) - debug: 4.4.3(supports-color@7.2.0) - eslint: 10.10.0(supports-color@7.2.0) + '@typescript-eslint/typescript-estree': 8.70.0(@typescript/typescript6@6.0.2) + '@typescript-eslint/utils': 8.70.0(@typescript/typescript6@6.0.2)(eslint@10.11.0) + debug: 4.4.3 + eslint: 10.11.0 ts-api-utils: 2.5.0(@typescript/typescript6@6.0.2) typescript: '@typescript/typescript6@6.0.2' transitivePeerDependencies: @@ -3973,13 +3401,13 @@ snapshots: '@typescript-eslint/types@8.70.0': {} - '@typescript-eslint/typescript-estree@8.70.0(@typescript/typescript6@6.0.2)(supports-color@7.2.0)': + '@typescript-eslint/typescript-estree@8.70.0(@typescript/typescript6@6.0.2)': dependencies: - '@typescript-eslint/project-service': 8.70.0(@typescript/typescript6@6.0.2)(supports-color@7.2.0) + '@typescript-eslint/project-service': 8.70.0(@typescript/typescript6@6.0.2) '@typescript-eslint/tsconfig-utils': 8.70.0(@typescript/typescript6@6.0.2) '@typescript-eslint/types': 8.70.0 '@typescript-eslint/visitor-keys': 8.70.0 - debug: 4.4.3(supports-color@7.2.0) + debug: 4.4.3 minimatch: 10.2.6 semver: 7.8.5 tinyglobby: 0.2.17 @@ -3988,13 +3416,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@7.2.0))(supports-color@7.2.0)': + '@typescript-eslint/utils@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.11.0)': dependencies: - '@eslint-community/eslint-utils': 4.10.1(eslint@10.10.0(supports-color@7.2.0)) + '@eslint-community/eslint-utils': 4.10.1(eslint@10.11.0) '@typescript-eslint/scope-manager': 8.70.0 '@typescript-eslint/types': 8.70.0 - '@typescript-eslint/typescript-estree': 8.70.0(@typescript/typescript6@6.0.2)(supports-color@7.2.0) - eslint: 10.10.0(supports-color@7.2.0) + '@typescript-eslint/typescript-estree': 8.70.0(@typescript/typescript6@6.0.2) + eslint: 10.11.0 typescript: '@typescript/typescript6@6.0.2' transitivePeerDependencies: - supports-color @@ -4068,10 +3496,10 @@ snapshots: dependencies: '@typescript/old': typescript@6.0.3 - '@typespec/ts-http-runtime@0.3.9(supports-color@7.2.0)': + '@typespec/ts-http-runtime@0.3.9': dependencies: - http-proxy-agent: 7.0.2(supports-color@7.2.0) - https-proxy-agent: 7.0.6(supports-color@7.2.0) + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 tslib: 2.8.1 transitivePeerDependencies: - supports-color @@ -4115,39 +3543,34 @@ snapshots: '@vscode/vsce-sign-win32-arm64': 2.0.6 '@vscode/vsce-sign-win32-x64': 2.0.6 - '@vscode/vsce@3.9.2(supports-color@7.2.0)': + '@vscode/vsce@4.0.0': dependencies: - '@azure/identity': 4.13.2(supports-color@7.2.0) - '@secretlint/node': 10.2.2(supports-color@7.2.0) - '@secretlint/secretlint-formatter-sarif': 10.2.2 + '@azure/identity': 4.13.3 + '@napi-rs/keyring': 1.3.0 + '@secretlint/core': 10.2.2 '@secretlint/secretlint-rule-no-dotenv': 10.2.2 '@secretlint/secretlint-rule-preset-recommend': 10.2.2 + '@secretlint/source-creator': 10.2.2 + '@secretlint/types': 10.2.2 '@vscode/vsce-sign': 2.1.0 azure-devops-node-api: 12.5.0 - chalk: 4.1.2 - cheerio: 1.2.0 cockatiel: 3.2.1 commander: 12.1.0 - form-data: 4.0.6 - glob: 13.0.6 hosted-git-info: 4.1.0 jsonc-parser: 3.3.1 - leven: 3.1.0 - markdown-it: 14.3.2 + marked: 18.0.13 mime: 1.6.0 minimatch: 10.2.6 - parse-semver: 1.1.1 + parse5: 8.0.1 + proper-lockfile: 4.1.2 read: 1.0.7 - secretlint: 10.2.2(supports-color@7.2.0) semver: 7.8.5 - tmp: 0.2.7 + tinyglobby: 0.2.17 typed-rest-client: 1.8.11 url-join: 4.0.1 xml2js: 0.5.0 yauzl: 3.4.0 yazl: 2.5.1 - optionalDependencies: - keytar: 7.9.0 transitivePeerDependencies: - supports-color @@ -4166,25 +3589,6 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ajv@8.20.0: - dependencies: - fast-deep-equal: 3.1.3 - fast-uri: 3.1.7 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - - ansi-escapes@7.3.0: - dependencies: - environment: 1.1.0 - - ansi-regex@5.0.1: {} - - ansi-regex@6.3.0: {} - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - ansi-styles@7.0.0: {} argparse@2.0.1: {} @@ -4239,12 +3643,8 @@ snapshots: get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 - astral-regex@2.0.0: {} - async-function@1.0.0: {} - asynckit@0.4.0: {} - available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.1.0 @@ -4258,49 +3658,27 @@ snapshots: balanced-match@4.0.4: {} - base64-js@1.5.1: - optional: true - before-after-hook@4.0.0: {} binaryextensions@6.11.0: dependencies: editions: 6.22.0 - bl@4.1.0: - dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.2 - optional: true - - boolbase@1.0.0: {} - boundary@2.0.0: {} - brace-expansion@1.1.18: + brace-expansion@1.1.21: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@5.0.9: + brace-expansion@5.0.12: dependencies: balanced-match: 4.0.4 - braces@3.0.3: - dependencies: - fill-range: 7.1.1 - buffer-crc32@0.2.13: {} buffer-equal-constant-time@1.0.1: {} - buffer@5.7.1: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - optional: true - bufferutil@4.1.0: dependencies: node-gyp-build: 4.8.4 @@ -4335,43 +3713,10 @@ snapshots: call-bind-apply-helpers: 1.0.2 get-intrinsic: 1.3.0 - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - chalk@5.6.2: {} - chalk@6.0.0: {} chardet@2.2.0: {} - cheerio-select@2.1.0: - dependencies: - boolbase: 1.0.0 - css-select: 5.2.2 - css-what: 6.2.2 - domelementtype: 2.3.0 - domhandler: 5.0.3 - domutils: 3.2.2 - - cheerio@1.2.0: - dependencies: - cheerio-select: 2.1.0 - dom-serializer: 2.0.0 - domhandler: 5.0.3 - domutils: 3.2.2 - encoding-sniffer: 0.2.1 - htmlparser2: 10.1.0 - parse5: 7.3.0 - parse5-htmlparser2-tree-adapter: 7.1.0 - parse5-parser-stream: 7.1.2 - undici: 7.29.1 - whatwg-mimetype: 4.0.0 - - chownr@1.1.4: - optional: true - cli-width@4.1.0: {} clipanion@4.0.0-rc.4(typanion@3.14.0): @@ -4380,23 +3725,13 @@ snapshots: cockatiel@3.2.1: {} - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.4: {} - colorette@2.0.20: {} - combined-stream@1.0.8: - dependencies: - delayed-stream: 1.0.0 - commander@12.1.0: {} concat-map@0.0.1: {} - content-type@3.1.0: {} + content-type@3.1.1: {} cross-spawn@7.0.6: dependencies: @@ -4404,16 +3739,6 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - css-select@5.2.2: - dependencies: - boolbase: 1.0.0 - css-what: 6.2.2 - domhandler: 5.0.3 - domutils: 3.2.2 - nth-check: 2.1.1 - - css-what@6.2.2: {} - data-view-buffer@1.0.2: dependencies: call-bound: 1.0.4 @@ -4432,25 +3757,13 @@ snapshots: es-errors: 1.3.0 is-data-view: 1.0.2 - debug@3.2.7(supports-color@7.2.0): + debug@3.2.7: dependencies: ms: 2.1.3 - optionalDependencies: - supports-color: 7.2.0 - debug@4.4.3(supports-color@7.2.0): + debug@4.4.3: dependencies: ms: 2.1.3 - optionalDependencies: - supports-color: 7.2.0 - - decompress-response@6.0.0: - dependencies: - mimic-response: 3.1.0 - optional: true - - deep-extend@0.6.0: - optional: true deep-is@0.1.4: {} @@ -4475,33 +3788,10 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 - delayed-stream@1.0.0: {} - - detect-libc@2.1.2: - optional: true - doctrine@2.1.0: dependencies: esutils: 2.0.3 - dom-serializer@2.0.0: - dependencies: - domelementtype: 2.3.0 - domhandler: 5.0.3 - entities: 4.5.0 - - domelementtype@2.3.0: {} - - domhandler@5.0.3: - dependencies: - domelementtype: 2.3.0 - - domutils@3.2.2: - dependencies: - dom-serializer: 2.0.0 - domelementtype: 2.3.0 - domhandler: 5.0.3 - dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 @@ -4516,28 +3806,7 @@ snapshots: dependencies: version-range: 4.15.0 - emnapi@1.11.3: - optional: true - - emoji-regex@8.0.0: {} - - encoding-sniffer@0.2.1: - dependencies: - iconv-lite: 0.6.3 - whatwg-encoding: 3.1.1 - - end-of-stream@1.4.5: - dependencies: - once: 1.4.0 - optional: true - - entities@4.5.0: {} - - entities@6.0.1: {} - - entities@7.0.1: {} - - environment@1.1.0: {} + entities@8.1.0: {} es-abstract-get@1.0.0: dependencies: @@ -4598,10 +3867,10 @@ snapshots: string.prototype.trimstart: 1.0.8 typed-array-buffer: 1.0.3 typed-array-byte-length: 1.0.3 - typed-array-byte-offset: 1.0.4 + typed-array-byte-offset: 1.0.5 typed-array-length: 1.0.8 unbox-primitive: 1.1.0 - which-typed-array: 1.1.22 + which-typed-array: 1.1.24 es-define-property@1.0.1: {} @@ -4666,48 +3935,48 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-prettier@10.1.8(eslint@10.10.0(supports-color@7.2.0)): + eslint-config-prettier@10.1.8(eslint@10.11.0): dependencies: - eslint: 10.10.0(supports-color@7.2.0) + eslint: 10.11.0 - eslint-import-resolver-node@0.3.10(supports-color@7.2.0): + eslint-import-resolver-node@0.3.10: dependencies: - debug: 3.2.7(supports-color@7.2.0) - is-core-module: 2.16.2 + debug: 3.2.7 + is-core-module: 2.17.0 resolve: 2.0.0-next.7 transitivePeerDependencies: - supports-color - eslint-module-utils@2.14.0(@typescript-eslint/parser@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@7.2.0))(supports-color@7.2.0))(eslint-import-resolver-node@0.3.10(supports-color@7.2.0))(eslint@10.10.0(supports-color@7.2.0))(supports-color@7.2.0): + eslint-module-utils@2.14.0(@typescript-eslint/parser@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.11.0))(eslint-import-resolver-node@0.3.10)(eslint@10.11.0): dependencies: - debug: 3.2.7(supports-color@7.2.0) + debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.70.0(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@7.2.0))(supports-color@7.2.0) - eslint: 10.10.0(supports-color@7.2.0) - eslint-import-resolver-node: 0.3.10(supports-color@7.2.0) + '@typescript-eslint/parser': 8.70.0(@typescript/typescript6@6.0.2)(eslint@10.11.0) + eslint: 10.11.0 + eslint-import-resolver-node: 0.3.10 transitivePeerDependencies: - supports-color - eslint-plugin-es@3.0.1(eslint@10.10.0(supports-color@7.2.0)): + eslint-plugin-es@3.0.1(eslint@10.11.0): dependencies: - eslint: 10.10.0(supports-color@7.2.0) + eslint: 10.11.0 eslint-utils: 2.1.0 regexpp: 3.2.0 - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@7.2.0))(supports-color@7.2.0))(eslint@10.10.0(supports-color@7.2.0))(supports-color@7.2.0): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.11.0))(eslint@10.11.0): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.2.0 array.prototype.findlastindex: 1.2.6 array.prototype.flat: 1.3.3 array.prototype.flatmap: 1.3.3 - debug: 3.2.7(supports-color@7.2.0) + debug: 3.2.7 doctrine: 2.1.0 - eslint: 10.10.0(supports-color@7.2.0) - eslint-import-resolver-node: 0.3.10(supports-color@7.2.0) - eslint-module-utils: 2.14.0(@typescript-eslint/parser@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@7.2.0))(supports-color@7.2.0))(eslint-import-resolver-node@0.3.10(supports-color@7.2.0))(eslint@10.10.0(supports-color@7.2.0))(supports-color@7.2.0) + eslint: 10.11.0 + eslint-import-resolver-node: 0.3.10 + eslint-module-utils: 2.14.0(@typescript-eslint/parser@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.11.0))(eslint-import-resolver-node@0.3.10)(eslint@10.11.0) hasown: 2.0.4 - is-core-module: 2.16.2 + is-core-module: 2.17.0 is-glob: 4.0.3 minimatch: 3.1.5 object.fromentries: 2.0.8 @@ -4717,30 +3986,30 @@ snapshots: string.prototype.trimend: 1.0.10 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.70.0(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@7.2.0))(supports-color@7.2.0) + '@typescript-eslint/parser': 8.70.0(@typescript/typescript6@6.0.2)(eslint@10.11.0) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-node@11.1.0(eslint@10.10.0(supports-color@7.2.0)): + eslint-plugin-node@11.1.0(eslint@10.11.0): dependencies: - eslint: 10.10.0(supports-color@7.2.0) - eslint-plugin-es: 3.0.1(eslint@10.10.0(supports-color@7.2.0)) + eslint: 10.11.0 + eslint-plugin-es: 3.0.1(eslint@10.11.0) eslint-utils: 2.1.0 ignore: 5.3.2 minimatch: 3.1.5 resolve: 1.22.12 semver: 6.3.1 - eslint-plugin-prettier@5.5.6(eslint-config-prettier@10.1.8(eslint@10.10.0(supports-color@7.2.0)))(eslint@10.10.0(supports-color@7.2.0))(prettier@3.9.6): + eslint-plugin-prettier@5.5.6(eslint-config-prettier@10.1.8(eslint@10.11.0))(eslint@10.11.0)(prettier@3.9.8): dependencies: - eslint: 10.10.0(supports-color@7.2.0) - prettier: 3.9.6 + eslint: 10.11.0 + prettier: 3.9.8 prettier-linter-helpers: 1.0.1 synckit: 0.11.13 optionalDependencies: - eslint-config-prettier: 10.1.8(eslint@10.10.0(supports-color@7.2.0)) + eslint-config-prettier: 10.1.8(eslint@10.11.0) eslint-scope@9.1.2: dependencies: @@ -4759,11 +4028,11 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.10.0(supports-color@7.2.0): + eslint@10.11.0: dependencies: - '@eslint-community/eslint-utils': 4.10.1(eslint@10.10.0(supports-color@7.2.0)) + '@eslint-community/eslint-utils': 4.10.1(eslint@10.11.0) '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.23.5(supports-color@7.2.0) + '@eslint/config-array': 0.23.5 '@eslint/config-helpers': 0.7.0 '@eslint/core': 1.2.1 '@eslint/plugin-kit': 0.7.3 @@ -4773,7 +4042,7 @@ snapshots: '@types/estree': 1.0.9 ajv: 6.15.0 cross-spawn: 7.0.6 - debug: 4.4.3(supports-color@7.2.0) + debug: 4.4.3 escape-string-regexp: 4.0.0 eslint-scope: 9.1.2 eslint-visitor-keys: 5.0.1 @@ -4812,21 +4081,10 @@ snapshots: esutils@2.0.3: {} - expand-template@2.0.3: - optional: true - fast-deep-equal@3.1.3: {} fast-diff@1.3.0: {} - fast-glob@3.3.3: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.8 - fast-json-stable-stringify@2.1.0: {} fast-levenshtein@2.0.6: {} @@ -4837,16 +4095,10 @@ snapshots: dependencies: fast-string-truncated-width: 3.0.3 - fast-uri@3.1.7: {} - fast-wrap-ansi@0.2.2: dependencies: fast-string-width: 3.0.2 - fastq@1.20.3: - dependencies: - reusify: 1.1.0 - fdir@6.5.0(picomatch@4.0.7): optionalDependencies: picomatch: 4.0.7 @@ -4855,10 +4107,6 @@ snapshots: dependencies: flat-cache: 6.1.23 - fill-range@7.1.1: - dependencies: - to-regex-range: 5.0.1 - find-up@5.0.0: dependencies: locate-path: 6.0.0 @@ -4876,23 +4124,6 @@ snapshots: dependencies: is-callable: 1.2.7 - form-data@4.0.6: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - es-set-tostringtag: 2.1.0 - hasown: 2.0.4 - mime-types: 2.1.35 - - fs-constants@1.0.0: - optional: true - - fs-extra@11.4.0: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.2.1 - universalify: 2.0.1 - function-bind@1.1.2: {} function.prototype.name@1.2.0: @@ -4935,45 +4166,21 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.3.0 - github-from-package@0.0.0: - optional: true - - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - glob-parent@6.0.2: dependencies: is-glob: 4.0.3 - glob@13.0.6: - dependencies: - minimatch: 10.2.6 - minipass: 7.1.3 - path-scurry: 2.0.2 - globalthis@1.0.4: dependencies: define-properties: 1.2.1 gopd: 1.2.0 - globby@14.1.0: - dependencies: - '@sindresorhus/merge-streams': 2.3.0 - fast-glob: 3.3.3 - ignore: 7.0.9 - path-type: 6.0.0 - slash: 5.1.0 - unicorn-magic: 0.3.0 - gopd@1.2.0: {} graceful-fs@4.2.11: {} has-bigints@1.1.0: {} - has-flag@4.0.0: {} - has-property-descriptors@1.0.2: dependencies: es-define-property: 1.0.1 @@ -5004,56 +4211,30 @@ snapshots: dependencies: lru-cache: 6.0.0 - hosted-git-info@7.0.2: - dependencies: - lru-cache: 10.4.3 - - htmlparser2@10.1.0: - dependencies: - domelementtype: 2.3.0 - domhandler: 5.0.3 - domutils: 3.2.2 - entities: 7.0.1 - - http-proxy-agent@7.0.2(supports-color@7.2.0): + http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.4 - debug: 4.4.3(supports-color@7.2.0) + debug: 4.4.3 transitivePeerDependencies: - supports-color - https-proxy-agent@7.0.6(supports-color@7.2.0): + https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.4 - debug: 4.4.3(supports-color@7.2.0) + debug: 4.4.3 transitivePeerDependencies: - supports-color - iconv-lite@0.6.3: - dependencies: - safer-buffer: 2.1.2 - iconv-lite@0.7.3: dependencies: safer-buffer: 2.1.2 - ieee754@1.2.1: - optional: true - ignore@5.3.2: {} ignore@7.0.9: {} imurmurhash@0.1.4: {} - index-to-position@1.2.0: {} - - inherits@2.0.4: - optional: true - - ini@1.3.8: - optional: true - internal-slot@1.1.0: dependencies: es-errors: 1.3.0 @@ -5085,7 +4266,7 @@ snapshots: is-callable@1.2.7: {} - is-core-module@2.16.2: + is-core-module@2.17.0: dependencies: hasown: 2.0.4 @@ -5112,8 +4293,6 @@ snapshots: dependencies: call-bound: 1.0.4 - is-fullwidth-code-point@3.0.0: {} - is-generator-function@1.1.2: dependencies: call-bound: 1.0.4 @@ -5139,8 +4318,6 @@ snapshots: call-bound: 1.0.4 has-tostringtag: 1.0.2 - is-number@7.0.0: {} - is-regex@1.2.1: dependencies: call-bound: 1.0.4 @@ -5167,7 +4344,7 @@ snapshots: is-typed-array@1.1.15: dependencies: - which-typed-array: 1.1.22 + which-typed-array: 1.1.24 is-weakmap@2.0.2: {} @@ -5196,13 +4373,7 @@ snapshots: editions: 6.22.0 textextensions: 6.11.0 - js-tokens@4.0.0: {} - - js-yaml@4.3.2: - dependencies: - argparse: 2.0.1 - - js-yaml@5.4.1: + js-yaml@5.4.2: dependencies: argparse: 2.0.1 @@ -5210,8 +4381,6 @@ snapshots: json-schema-traverse@0.4.1: {} - json-schema-traverse@1.0.0: {} - json-stable-stringify-without-jsonify@1.0.1: {} json-with-bigint@3.5.12: {} @@ -5220,16 +4389,8 @@ snapshots: dependencies: minimist: 1.2.8 - json5@2.2.3: {} - jsonc-parser@3.3.1: {} - jsonfile@6.2.1: - dependencies: - universalify: 2.0.1 - optionalDependencies: - graceful-fs: 4.2.11 - jsonwebtoken@9.0.3: dependencies: jws: 4.0.1 @@ -5254,27 +4415,15 @@ snapshots: jwa: 2.0.1 safe-buffer: 5.2.1 - keytar@7.9.0: - dependencies: - node-addon-api: 4.3.0 - prebuild-install: 7.1.3 - optional: true - keyv@5.6.0: dependencies: '@keyv/serialize': 1.1.1 - leven@3.1.0: {} - levn@0.4.1: dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 - linkify-it@5.0.2: - dependencies: - uc.micro: 2.1.0 - locate-path@6.0.0: dependencies: p-locate: 5.0.0 @@ -5293,85 +4442,36 @@ snapshots: lodash.once@4.1.1: {} - lodash.truncate@4.4.2: {} - - lodash@4.18.1: {} - - lru-cache@10.4.3: {} - - lru-cache@11.5.2: {} - lru-cache@6.0.0: dependencies: yallist: 4.0.0 - markdown-it@14.3.2: - dependencies: - argparse: 2.0.1 - entities: 4.5.0 - linkify-it: 5.0.2 - mdurl: 2.1.0 - punycode.js: 2.3.1 - uc.micro: 2.1.0 + marked@18.0.13: {} math-intrinsics@1.1.0: {} - mdurl@2.1.0: {} - memorystream@0.3.1: {} - merge2@1.4.1: {} - - micromatch@4.0.8: - dependencies: - braces: 3.0.3 - picomatch: 2.3.2 - - mime-db@1.52.0: {} - - mime-types@2.1.35: - dependencies: - mime-db: 1.52.0 - mime@1.6.0: {} - mimic-response@3.1.0: - optional: true - minimatch@10.2.6: dependencies: - brace-expansion: 5.0.9 + brace-expansion: 5.0.12 minimatch@3.1.5: dependencies: - brace-expansion: 1.1.18 + brace-expansion: 1.1.21 minimist@1.2.8: {} - minipass@7.1.3: {} - - mkdirp-classic@0.5.3: - optional: true - ms@2.1.3: {} mute-stream@0.0.8: {} mute-stream@3.0.0: {} - napi-build-utils@2.0.0: - optional: true - natural-compare@1.4.0: {} - node-abi@3.96.0: - dependencies: - semver: 7.8.5 - optional: true - - node-addon-api@4.3.0: - optional: true - node-exports-info@1.6.2: dependencies: array.prototype.flatmap: 1.3.3 @@ -5382,17 +4482,6 @@ snapshots: node-gyp-build@4.8.4: optional: true - node-sarif-builder@3.4.0: - dependencies: - '@types/sarif': 2.1.7 - fs-extra: 11.4.0 - - normalize-package-data@6.0.2: - dependencies: - hosted-git-info: 7.0.2 - semver: 7.8.5 - validate-npm-package-license: 3.0.4 - npm-normalize-package-bin@6.0.0: {} npm-run-all2@9.0.3: @@ -5406,10 +4495,6 @@ snapshots: shell-quote: 1.10.0 which: 7.0.0 - nth-check@2.1.1: - dependencies: - boolbase: 1.0.0 - object-inspect@1.13.4: {} object-keys@1.1.1: {} @@ -5450,12 +4535,7 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.1.2 - obug@2.2.1: {} - - once@1.4.0: - dependencies: - wrappy: 1.0.2 - optional: true + obug@3.0.0: {} open@10.2.0: dependencies: @@ -5488,30 +4568,9 @@ snapshots: dependencies: p-limit: 3.1.0 - p-map@7.0.7: {} - - parse-json@8.3.0: - dependencies: - '@babel/code-frame': 7.29.7 - index-to-position: 1.2.0 - type-fest: 4.41.0 - - parse-semver@1.1.1: - dependencies: - semver: 5.7.2 - - parse5-htmlparser2-tree-adapter@7.1.0: - dependencies: - domhandler: 5.0.3 - parse5: 7.3.0 - - parse5-parser-stream@7.1.2: - dependencies: - parse5: 7.3.0 - - parse5@7.3.0: + parse5@8.0.1: dependencies: - entities: 6.0.1 + entities: 8.1.0 path-exists@4.0.0: {} @@ -5519,60 +4578,27 @@ snapshots: path-parse@1.0.7: {} - path-scurry@2.0.2: - dependencies: - lru-cache: 11.5.2 - minipass: 7.1.3 - - path-type@6.0.0: {} - pend@1.2.0: {} - picocolors@1.1.1: {} - - picomatch@2.3.2: {} - picomatch@4.0.7: {} pidtree@1.0.0: {} - pluralize@2.0.0: {} - - pluralize@8.0.0: {} - possible-typed-array-names@1.1.0: {} - prebuild-install@7.1.3: - dependencies: - detect-libc: 2.1.2 - expand-template: 2.0.3 - github-from-package: 0.0.0 - minimist: 1.2.8 - mkdirp-classic: 0.5.3 - napi-build-utils: 2.0.0 - node-abi: 3.96.0 - pump: 3.0.4 - rc: 1.2.8 - simple-get: 4.0.1 - tar-fs: 2.1.5 - tunnel-agent: 0.6.0 - optional: true - prelude-ls@1.2.1: {} prettier-linter-helpers@1.0.1: dependencies: fast-diff: 1.3.0 - prettier@3.9.6: {} + prettier@3.9.8: {} - pump@3.0.4: + proper-lockfile@4.1.2: dependencies: - end-of-stream: 1.4.5 - once: 1.4.0 - optional: true - - punycode.js@2.3.1: {} + graceful-fs: 4.2.11 + retry: 0.12.0 + signal-exit: 3.0.7 punycode@2.3.1: {} @@ -5585,49 +4611,15 @@ snapshots: es-define-property: 1.0.1 side-channel: 1.1.1 - queue-microtask@1.2.3: {} - - rc-config-loader@4.1.4(supports-color@7.2.0): - dependencies: - debug: 4.4.3(supports-color@7.2.0) - js-yaml: 4.3.2 - json5: 2.2.3 - require-from-string: 2.0.2 - transitivePeerDependencies: - - supports-color - - rc@1.2.8: - dependencies: - deep-extend: 0.6.0 - ini: 1.3.8 - minimist: 1.2.8 - strip-json-comments: 2.0.1 - optional: true - read-package-json-fast@6.0.0: dependencies: json-parse-even-better-errors: 6.0.0 npm-normalize-package-bin: 6.0.0 - read-pkg@9.0.1: - dependencies: - '@types/normalize-package-data': 2.4.4 - normalize-package-data: 6.0.2 - parse-json: 8.3.0 - type-fest: 4.41.0 - unicorn-magic: 0.1.0 - read@1.0.7: dependencies: mute-stream: 0.0.8 - readable-stream@3.6.2: - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - optional: true - reflect.getprototypeof@1.0.10: dependencies: call-bind: 1.0.9 @@ -5650,32 +4642,26 @@ snapshots: regexpp@3.2.0: {} - require-from-string@2.0.2: {} - resolve@1.22.12: dependencies: es-errors: 1.3.0 - is-core-module: 2.16.2 + is-core-module: 2.17.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 resolve@2.0.0-next.7: dependencies: es-errors: 1.3.0 - is-core-module: 2.16.2 + is-core-module: 2.17.0 node-exports-info: 1.6.2 object-keys: 1.1.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - reusify@1.1.0: {} + retry@0.12.0: {} run-applescript@7.1.0: {} - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 - safe-array-concat@1.1.4: dependencies: call-bind: 1.0.9 @@ -5701,20 +4687,6 @@ snapshots: sax@1.6.1: {} - secretlint@10.2.2(supports-color@7.2.0): - dependencies: - '@secretlint/config-creator': 10.2.2 - '@secretlint/formatter': 10.2.2(supports-color@7.2.0) - '@secretlint/node': 10.2.2(supports-color@7.2.0) - '@secretlint/profiler': 10.2.2 - debug: 4.4.3(supports-color@7.2.0) - globby: 14.1.0 - read-pkg: 9.0.1 - transitivePeerDependencies: - - supports-color - - semver@5.7.2: {} - semver@6.3.1: {} semver@7.8.5: {} @@ -5777,51 +4749,15 @@ snapshots: side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 - signal-exit@4.1.0: {} - - simple-concat@1.0.1: - optional: true + signal-exit@3.0.7: {} - simple-get@4.0.1: - dependencies: - decompress-response: 6.0.0 - once: 1.4.0 - simple-concat: 1.0.1 - optional: true - - slash@5.1.0: {} - - slice-ansi@4.0.0: - dependencies: - ansi-styles: 4.3.0 - astral-regex: 2.0.0 - is-fullwidth-code-point: 3.0.0 - - spdx-correct@3.2.0: - dependencies: - spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.23 - - spdx-exceptions@2.5.0: {} - - spdx-expression-parse@3.0.1: - dependencies: - spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.23 - - spdx-license-ids@3.0.23: {} + signal-exit@4.1.0: {} stop-iteration-iterator@1.1.0: dependencies: es-errors: 1.3.0 internal-slot: 1.1.0 - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - string.prototype.trim@1.2.11: dependencies: call-bind: 1.0.9 @@ -5846,75 +4782,18 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.1.2 - string_decoder@1.3.0: - dependencies: - safe-buffer: 5.2.1 - optional: true - - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-ansi@7.2.0: - dependencies: - ansi-regex: 6.3.0 - strip-bom@3.0.0: {} - strip-json-comments@2.0.1: - optional: true - structured-source@4.0.0: dependencies: boundary: 2.0.0 - supports-color@7.2.0: - dependencies: - has-flag: 4.0.0 - - supports-hyperlinks@3.2.0: - dependencies: - has-flag: 4.0.0 - supports-color: 7.2.0 - supports-preserve-symlinks-flag@1.0.0: {} synckit@0.11.13: dependencies: '@pkgr/core': 0.3.6 - table@6.9.0: - dependencies: - ajv: 8.20.0 - lodash.truncate: 4.4.2 - slice-ansi: 4.0.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - tar-fs@2.1.5: - dependencies: - chownr: 1.1.4 - mkdirp-classic: 0.5.3 - pump: 3.0.4 - tar-stream: 2.2.0 - optional: true - - tar-stream@2.2.0: - dependencies: - bl: 4.1.0 - end-of-stream: 1.4.5 - fs-constants: 1.0.0 - inherits: 2.0.4 - readable-stream: 3.6.2 - optional: true - - terminal-link@4.0.0: - dependencies: - ansi-escapes: 7.3.0 - supports-hyperlinks: 3.2.0 - - text-table@0.2.0: {} - textextensions@6.11.0: dependencies: editions: 6.22.0 @@ -5924,12 +4803,6 @@ snapshots: fdir: 6.5.0(picomatch@4.0.7) picomatch: 4.0.7 - tmp@0.2.7: {} - - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 - ts-api-utils@2.5.0(@typescript/typescript6@6.0.2): dependencies: typescript: '@typescript/typescript6@6.0.2' @@ -5943,11 +4816,6 @@ snapshots: tslib@2.8.1: {} - tunnel-agent@0.6.0: - dependencies: - safe-buffer: 5.2.1 - optional: true - tunnel@0.0.6: {} typanion@3.14.0: {} @@ -5956,8 +4824,6 @@ snapshots: dependencies: prelude-ls: 1.2.1 - type-fest@4.41.0: {} - typed-array-buffer@1.0.3: dependencies: call-bound: 1.0.4 @@ -5972,13 +4838,12 @@ snapshots: has-proto: 1.2.0 is-typed-array: 1.1.15 - typed-array-byte-offset@1.0.4: + typed-array-byte-offset@1.0.5: dependencies: available-typed-arrays: 1.0.7 call-bind: 1.0.9 for-each: 0.3.5 gopd: 1.2.0 - has-proto: 1.2.0 is-typed-array: 1.1.15 reflect.getprototypeof: 1.0.10 @@ -5997,13 +4862,13 @@ snapshots: tunnel: 0.0.6 underscore: 1.13.8 - typescript-eslint@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@7.2.0))(supports-color@7.2.0): + typescript-eslint@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.11.0): dependencies: - '@typescript-eslint/eslint-plugin': 8.70.0(@typescript-eslint/parser@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@7.2.0))(supports-color@7.2.0))(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@7.2.0))(supports-color@7.2.0) - '@typescript-eslint/parser': 8.70.0(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@7.2.0))(supports-color@7.2.0) - '@typescript-eslint/typescript-estree': 8.70.0(@typescript/typescript6@6.0.2)(supports-color@7.2.0) - '@typescript-eslint/utils': 8.70.0(@typescript/typescript6@6.0.2)(eslint@10.10.0(supports-color@7.2.0))(supports-color@7.2.0) - eslint: 10.10.0(supports-color@7.2.0) + '@typescript-eslint/eslint-plugin': 8.70.0(@typescript-eslint/parser@8.70.0(@typescript/typescript6@6.0.2)(eslint@10.11.0))(@typescript/typescript6@6.0.2)(eslint@10.11.0) + '@typescript-eslint/parser': 8.70.0(@typescript/typescript6@6.0.2)(eslint@10.11.0) + '@typescript-eslint/typescript-estree': 8.70.0(@typescript/typescript6@6.0.2) + '@typescript-eslint/utils': 8.70.0(@typescript/typescript6@6.0.2)(eslint@10.11.0) + eslint: 10.11.0 typescript: '@typescript/typescript6@6.0.2' transitivePeerDependencies: - supports-color @@ -6033,8 +4898,6 @@ snapshots: '@typescript/typescript-win32-arm64': 7.0.2 '@typescript/typescript-win32-x64': 7.0.2 - uc.micro@2.1.0: {} - unbox-primitive@1.1.0: dependencies: call-bound: 1.0.4 @@ -6046,38 +4909,16 @@ snapshots: undici-types@8.9.0: {} - undici@7.29.1: {} - - unicorn-magic@0.1.0: {} - - unicorn-magic@0.3.0: {} - universal-user-agent@7.0.3: {} - universalify@2.0.1: {} - uri-js@4.4.1: dependencies: punycode: 2.3.1 url-join@4.0.1: {} - util-deprecate@1.0.2: - optional: true - - validate-npm-package-license@3.0.4: - dependencies: - spdx-correct: 3.2.0 - spdx-expression-parse: 3.0.1 - version-range@4.15.0: {} - whatwg-encoding@3.1.1: - dependencies: - iconv-lite: 0.6.3 - - whatwg-mimetype@4.0.0: {} - which-boxed-primitive@1.1.1: dependencies: is-bigint: 1.1.0 @@ -6100,7 +4941,7 @@ snapshots: isarray: 2.0.5 which-boxed-primitive: 1.1.1 which-collection: 1.0.2 - which-typed-array: 1.1.22 + which-typed-array: 1.1.24 which-collection@1.0.2: dependencies: @@ -6109,7 +4950,7 @@ snapshots: is-weakmap: 2.0.2 is-weakset: 2.0.4 - which-typed-array@1.1.22: + which-typed-array@1.1.24: dependencies: available-typed-arrays: 1.0.7 call-bind: 1.0.9 @@ -6129,9 +4970,6 @@ snapshots: word-wrap@1.2.5: {} - wrappy@1.0.2: - optional: true - wsl-utils@0.1.0: dependencies: is-wsl: 3.1.1 diff --git a/extensions/VSCode/src/extension.ts b/extensions/VSCode/src/extension.ts index 4fe8e14c..d0b38f29 100644 --- a/extensions/VSCode/src/extension.ts +++ b/extensions/VSCode/src/extension.ts @@ -36,7 +36,7 @@ import vscode, { TextEditor, TextEditorRevealType, } from "vscode"; -import { CodeChatEditorServer, initServer } from "./index.js"; +import type { CodeChatEditorServer } from "./index.js"; // ### Local packages import { @@ -125,14 +125,11 @@ let version = 0.0; // An object to start/stop the CodeChat Editor Server. let codeChatEditorServer: CodeChatEditorServer | undefined; -// Before using `CodeChatEditorServer`, we must initialize it. -{ - const ext = vscode.extensions.getExtension( - "CodeChat.codechat-editor-client", - ); - assert(ext !== undefined); - initServer(ext.extensionPath); -} + +// The in-flight or completed load of the native module holding the CodeChat +// Editor Server, started on demand by `load_native_module`. +type NativeModule = typeof import("./index.js"); +let native_module: Promise | undefined; // --- // @@ -2015,6 +2012,56 @@ function queueCaptureEvent( // Activation/deactivation // ----------------------- // +// Import the native module, initializing the Server it contains on the first +// successful import. Diagnostics which instrument the startup sequence belong +// here: this is the earliest point at which a failure of the native module can +// be reported, since the extension is by now fully loaded and running. +const load_native_module = ( + // This extension's context. Its `extensionPath` gives the extension's + // install directory, from which the Server locates the Client's files. + context: vscode.ExtensionContext, + // The imported, initialized module. +): Promise => { + if (native_module === undefined) { + // Store the promise before the `await` below hands control back to + // the event loop, so that a caller arriving while the load is in + // flight joins it rather than starting a second one. + native_module = (async () => { + let loaded: NativeModule; + try { + // The NAPI-RS-generated loader (`index.js`) throws while + // being imported when it finds no binding for this + // platform, so a static `import` of it would abort this + // module's load -- taking the extension down before + // `activate` runs, and before any diagnostic placed here + // could report why. A dynamic `import` instead defers that + // failure into a `try` block which can report it. + loaded = await import("./index.js"); + } catch (e) { + // Discard a failed import, so that it's retried when this + // command runs again instead of leaving a permanently + // rejected promise in place. Repeating it costs nothing: + // the bundler memoizes a successful import and resets a + // failed one -- see the `try`/`catch` in the `__commonJS` + // helper of the bundle in `out/extension.js`. + native_module = undefined; + throw e; + } + // `initServer` performs the Server's global setup, which + // `webserver::init_server` documents as callable only once. + // Deliberately leave `native_module` in place when it throws: + // the rejected promise then replays that first failure to every + // later caller, whereas retrying would run the setup a second + // time and report a complaint about the already-installed + // logger in place of the problem which actually stopped the + // Server. Recovering from this requires reloading the window. + loaded.initServer(context.extensionPath); + return loaded; + })(); + } + return native_module; +}; + // This is invoked when the extension is activated. It either creates a new // CodeChat Editor Server instance or reveals the currently running one. export const activate = (context: vscode.ExtensionContext) => { @@ -2111,6 +2158,21 @@ export const activate = (context: vscode.ExtensionContext) => { async () => { consoleLog("CodeChat Editor extension: starting."); + // Load the native module first, so that failing to load it + // leaves behind neither a webview panel nor subscriptions to + // editor events. + let native: NativeModule; + try { + native = await load_native_module(context); + } catch (e) { + // Report this even when `quiet_next_error` is set. + quiet_next_error = false; + show_error( + `Unable to load the CodeChat Editor Server: ${format_error_chain(e)}`, + ); + return; + } + if (!subscribed) { subscribed = true; @@ -2375,7 +2437,7 @@ export const activate = (context: vscode.ExtensionContext) => { // Start the server. consoleLog("CodeChat Editor extension: starting server."); - codeChatEditorServer = new CodeChatEditorServer( + codeChatEditorServer = new native.CodeChatEditorServer( vscode.Uri.joinPath( context.globalStorageUri, "capture-spool", @@ -2773,6 +2835,44 @@ const format_struct = (complex_data_structure: any): string => ).substring(0, MAX_MESSAGE_LENGTH) : ""; +// Format an error together with its chain of causes. The NAPI-RS loader places +// only a generic summary in the error it throws, recording the load failure of +// each candidate binding in a nested `cause`; without walking the chain, the +// message naming the actual problem is lost. +const format_error_chain = ( + // The error to format, of whatever type a `catch` block received. + error: unknown, + // The chain of messages, outermost first. +): string => { + const messages: string[] = []; + // A `cause` chain which loops back on itself would spin here forever. + // This runs only once something has already gone wrong, so it must not + // be what takes the extension host down. + const seen = new Set(); + let current = error; + while (current !== undefined && current !== null && !seen.has(current)) { + seen.add(current); + // A `catch` block receives whatever was thrown, and `String` throws + // in turn when that is a symbol. + messages.push( + current instanceof Error + ? current.message + : typeof current === "symbol" + ? current.toString() + : String(current), + ); + // Test for `cause` rather than reading it directly: it is absent + // both on errors which record no cause and on the runtimes which + // predate it, and the test supplies the property's type, which the + // TypeScript library this file compiles against lacks. + current = + current instanceof Error && "cause" in current + ? current.cause + : undefined; + } + return messages.join("\n caused by: "); +}; + // Send a result (a response to a message from the server) back to the server. const sendResult = async (id: number, result?: ResultErrTypes) => { assert(codeChatEditorServer); diff --git a/extensions/VSCode/src/index.js b/extensions/VSCode/src/index.js new file mode 100644 index 00000000..27231902 --- /dev/null +++ b/extensions/VSCode/src/index.js @@ -0,0 +1,982 @@ +/* eslint-disable */ +// @ts-nocheck +/* originally generated by NAPI-RS, now tracked and edited by hand */ + +const { readFileSync, readdirSync } = require('fs') + +// Verbose load tracing +// -------------------- +// +// Everything below, up to the end of this section, is hand-written; the +// rest of this file is the loader NAPI-RS generates. The builder passes +// `--js index-generated.js` so that a NAPI build writes its loader beside +// this one rather than over it, leaving `index-generated.js` as the +// reference to re-derive this file from when a NAPI-RS upgrade changes +// what it emits. +// +// A binding which fails to load reaches the user as a single +// "Cannot find native binding" thrown during extension activation, naming +// neither the artifact which was tried nor the reason each attempt failed. +// Every decision and every `require` attempt below is therefore logged, so +// that an Extension Host log copied from the user's machine identifies the +// failing step. Set `CODECHAT_NAPI_DEBUG=0` to silence the output. +const __dbgEnabled = process.env.CODECHAT_NAPI_DEBUG !== '0' +const __dbg = (...args) => { + if (!__dbgEnabled) return + try { + console.log('[codechat-napi]', ...args) + } catch { + // A console which throws must not turn a working load into a failure. + } +} +// Render an error as a single line. What arrives here is whatever a failed +// `require` produced, which includes non-Errors thrown by an addon's own +// initialization code. +const __dbgErrText = (e) => { + try { + if (e && typeof e === 'object') { + return `${e.name || 'Error'}${e.code ? ' [' + e.code + ']' : ''}: ${e.message}` + } + return String(e) + } catch { + return '' + } +} +const __dbgStack = (e) => { + try { + return e && typeof e === 'object' && typeof e.stack === 'string' ? e.stack : '' + } catch { + return '' + } +} +// An array whose `push` announces what it collects. The loader funnels every +// failed attempt into one of two such arrays, so tracing `push` reports each +// failure without touching the `require` call sites -- which must keep their +// literal string arguments for esbuild's `.node` copy loader to find them. +const __dbgTracedArray = (label) => { + const array = [] + if (!__dbgEnabled) return array + const push = Array.prototype.push.bind(array) + array.push = (...items) => { + for (const item of items) { + __dbg(`${label} <- ${__dbgErrText(item)}`) + const stack = __dbgStack(item) + if (stack) __dbg(`${label} <- stack: ${stack}`) + } + return push(...items) + } + return array +} +const __dbgAttempt = (kind, specifier) => { + __dbg(`attempting ${kind}: ${specifier}`) +} +// Report a successful load, then hand the binding back, so that this wraps an +// existing expression instead of restructuring the block it sits in. +const __dbgOk = (specifier, binding) => { + let keys + try { + keys = binding ? Object.keys(binding).join(', ') : String(binding) + } catch (e) { + keys = `` + } + __dbg(`LOADED ${specifier} -- exports: ${keys}`) + return binding +} +const LF = String.fromCharCode(10) +const CR = String.fromCharCode(13) +const SPACE = '' +const NL_INDENT = LF + ' ' +const __dbgChain = (label, errors) => { + __dbg(`${label}: ${errors.length} error(s) recorded`) + errors.forEach((e, i) => { + __dbg(` [${i}] ${__dbgErrText(e)}`) + const stack = __dbgStack(e) + // Indent a multi-line stack so that it reads as one entry in the log. + if (stack) __dbg(NL_INDENT.slice(1) + stack.split(CR).join(SPACE).split(LF).join(NL_INDENT)) + }) +} + +__dbg('==== binding load starting ====') +__dbg(`platform=${process.platform} arch=${process.arch} node=${process.version} modules=${process.versions.modules} electron=${process.versions.electron || 'none'}`) +__dbg(`execPath=${process.execPath}`) +__dbg(`cwd=${process.cwd()}`) +__dbg(`__dirname=${typeof __dirname === 'string' ? __dirname : ''}`) +__dbg(`config.variables: shlib_suffix=${process.config && process.config.variables ? process.config.variables.shlib_suffix : ''} node_target_type=${process.config && process.config.variables ? process.config.variables.node_target_type : ''}`) +for (const __dbgEnvName of [ + 'NAPI_RS_NATIVE_LIBRARY_PATH', + 'NAPI_RS_FORCE_WASI', + 'NAPI_RS_WASI_FLAVOR', + 'NAPI_RS_ENFORCE_VERSION_CHECK', +]) { + __dbg(`env ${__dbgEnvName}=${process.env[__dbgEnvName] === undefined ? '' : JSON.stringify(process.env[__dbgEnvName])}`) +} +// The artifact is looked for beside this file, so a listing of that directory +// shows directly whether the expected `.node` was packaged and installed. +try { + const __dbgDir = typeof __dirname === 'string' ? __dirname : '.' + const __dbgEntries = readdirSync(__dbgDir) + __dbg(`contents of ${__dbgDir} (${__dbgEntries.length} entries): ${__dbgEntries.join(', ')}`) +} catch (e) { + __dbg(`directory listing failed: ${__dbgErrText(e)}`) +} +let nativeBinding = null +// Which artifact actually loaded. The WASI fallback chain overwrites it with +// the flavor it resolved; the late native retry below leaves it alone because +// it only runs while no WASI candidate has been loaded. +let __napiLoadedBindingTarget = 'native' +const loadErrors = __dbgTracedArray('loadErrors') + +const isMusl = () => { + let musl = false + if (process.platform === 'linux') { + musl = isMuslFromFilesystem() + if (musl === null) { + musl = isMuslFromReport() + } + if (musl === null) { + musl = isMuslFromChildProcess() + } + } + __dbg(`isMusl() = ${musl}`) + return musl +} + +const isFileMusl = (f) => f.includes('libc.musl-') || f.includes('ld-musl-') + +const isMuslFromFilesystem = () => { + try { + return readFileSync('/usr/bin/ldd', 'utf-8').includes('musl') + } catch { + return null + } +} + +const isMuslFromReport = () => { + let report = null + if (process.report && typeof process.report.getReport === 'function') { + process.report.excludeNetwork = true + report = process.report.getReport() + } + if (!report) { + return null + } + if (report.header && report.header.glibcVersionRuntime) { + return false + } + if (Array.isArray(report.sharedObjects)) { + if (report.sharedObjects.some(isFileMusl)) { + return true + } + } + return false +} + +const isMuslFromChildProcess = () => { + try { + return require('child_process').execSync('ldd --version', { encoding: 'utf8' }).includes('musl') + } catch (e) { + // If we reach this case, we don't know if the system is musl or not, so is better to just fallback to false + return false + } +} + +function requireNative() { + __dbg('requireNative(): walking the platform/arch chain') + if (process.env.NAPI_RS_NATIVE_LIBRARY_PATH) { + try { + __dbgAttempt('NAPI_RS_NATIVE_LIBRARY_PATH override', process.env.NAPI_RS_NATIVE_LIBRARY_PATH) + const overrideBinding = __dbgOk(process.env.NAPI_RS_NATIVE_LIBRARY_PATH, require(process.env.NAPI_RS_NATIVE_LIBRARY_PATH)) + // The override may be a generated WASI loader, which already reports its + // own flavor. Adopt it: `module.exports` aliases this object, so claiming + // 'native' would both misreport the artifact and overwrite the loader's + // marker through the alias. + __napiLoadedBindingTarget = + overrideBinding && typeof overrideBinding.__napiBindingTarget === 'string' + ? overrideBinding.__napiBindingTarget + : 'native' + return overrideBinding + } catch (err) { + loadErrors.push(err) + } + } else if (process.platform === 'android') { + if (process.arch === 'arm64') { + try { + __dbgAttempt('local artifact', './codechat-editor-client.android-arm64.node') + return __dbgOk('./codechat-editor-client.android-arm64.node', require('./codechat-editor-client.android-arm64.node')) + } catch (e) { + loadErrors.push(e) + } + try { + __dbgAttempt('optional dependency package', 'codechat-editor-client-android-arm64') + const binding = require('codechat-editor-client-android-arm64') + const bindingPackageVersion = require('codechat-editor-client-android-arm64/package.json').version + if (bindingPackageVersion !== '0.2.5' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.2.5 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + } + return __dbgOk('codechat-editor-client-android-arm64', binding) + } catch (e) { + loadErrors.push(e) + } + } else if (process.arch === 'arm') { + try { + __dbgAttempt('local artifact', './codechat-editor-client.android-arm-eabi.node') + return __dbgOk('./codechat-editor-client.android-arm-eabi.node', require('./codechat-editor-client.android-arm-eabi.node')) + } catch (e) { + loadErrors.push(e) + } + try { + __dbgAttempt('optional dependency package', 'codechat-editor-client-android-arm-eabi') + const binding = require('codechat-editor-client-android-arm-eabi') + const bindingPackageVersion = require('codechat-editor-client-android-arm-eabi/package.json').version + if (bindingPackageVersion !== '0.2.5' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.2.5 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + } + return __dbgOk('codechat-editor-client-android-arm-eabi', binding) + } catch (e) { + loadErrors.push(e) + } + } else { + loadErrors.push(new Error(`Unsupported architecture on Android ${process.arch}`)) + } + } else if (process.platform === 'win32') { + if (process.arch === 'x64') { + if ((process.config && process.config.variables && process.config.variables.shlib_suffix === 'dll.a') || (process.config && process.config.variables && process.config.variables.node_target_type === 'shared_library')) { + try { + __dbgAttempt('local artifact', './codechat-editor-client.win32-x64-gnu.node') + return __dbgOk('./codechat-editor-client.win32-x64-gnu.node', require('./codechat-editor-client.win32-x64-gnu.node')) + } catch (e) { + loadErrors.push(e) + } + try { + __dbgAttempt('optional dependency package', 'codechat-editor-client-win32-x64-gnu') + const binding = require('codechat-editor-client-win32-x64-gnu') + const bindingPackageVersion = require('codechat-editor-client-win32-x64-gnu/package.json').version + if (bindingPackageVersion !== '0.2.5' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.2.5 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + } + return __dbgOk('codechat-editor-client-win32-x64-gnu', binding) + } catch (e) { + loadErrors.push(e) + } + } else { + try { + __dbgAttempt('local artifact', './codechat-editor-client.win32-x64-msvc.node') + return __dbgOk('./codechat-editor-client.win32-x64-msvc.node', require('./codechat-editor-client.win32-x64-msvc.node')) + } catch (e) { + loadErrors.push(e) + } + try { + __dbgAttempt('optional dependency package', 'codechat-editor-client-win32-x64-msvc') + const binding = require('codechat-editor-client-win32-x64-msvc') + const bindingPackageVersion = require('codechat-editor-client-win32-x64-msvc/package.json').version + if (bindingPackageVersion !== '0.2.5' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.2.5 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + } + return __dbgOk('codechat-editor-client-win32-x64-msvc', binding) + } catch (e) { + loadErrors.push(e) + } + } + } else if (process.arch === 'ia32') { + try { + __dbgAttempt('local artifact', './codechat-editor-client.win32-ia32-msvc.node') + return __dbgOk('./codechat-editor-client.win32-ia32-msvc.node', require('./codechat-editor-client.win32-ia32-msvc.node')) + } catch (e) { + loadErrors.push(e) + } + try { + __dbgAttempt('optional dependency package', 'codechat-editor-client-win32-ia32-msvc') + const binding = require('codechat-editor-client-win32-ia32-msvc') + const bindingPackageVersion = require('codechat-editor-client-win32-ia32-msvc/package.json').version + if (bindingPackageVersion !== '0.2.5' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.2.5 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + } + return __dbgOk('codechat-editor-client-win32-ia32-msvc', binding) + } catch (e) { + loadErrors.push(e) + } + } else if (process.arch === 'arm64') { + try { + __dbgAttempt('local artifact', './codechat-editor-client.win32-arm64-msvc.node') + return __dbgOk('./codechat-editor-client.win32-arm64-msvc.node', require('./codechat-editor-client.win32-arm64-msvc.node')) + } catch (e) { + loadErrors.push(e) + } + try { + __dbgAttempt('optional dependency package', 'codechat-editor-client-win32-arm64-msvc') + const binding = require('codechat-editor-client-win32-arm64-msvc') + const bindingPackageVersion = require('codechat-editor-client-win32-arm64-msvc/package.json').version + if (bindingPackageVersion !== '0.2.5' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.2.5 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + } + return __dbgOk('codechat-editor-client-win32-arm64-msvc', binding) + } catch (e) { + loadErrors.push(e) + } + } else { + loadErrors.push(new Error(`Unsupported architecture on Windows: ${process.arch}`)) + } + } else if (process.platform === 'darwin') { + try { + __dbgAttempt('local artifact', './codechat-editor-client.darwin-universal.node') + return __dbgOk('./codechat-editor-client.darwin-universal.node', require('./codechat-editor-client.darwin-universal.node')) + } catch (e) { + loadErrors.push(e) + } + try { + __dbgAttempt('optional dependency package', 'codechat-editor-client-darwin-universal') + const binding = require('codechat-editor-client-darwin-universal') + const bindingPackageVersion = require('codechat-editor-client-darwin-universal/package.json').version + if (bindingPackageVersion !== '0.2.5' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.2.5 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + } + return __dbgOk('codechat-editor-client-darwin-universal', binding) + } catch (e) { + loadErrors.push(e) + } + if (process.arch === 'x64') { + try { + __dbgAttempt('local artifact', './codechat-editor-client.darwin-x64.node') + return __dbgOk('./codechat-editor-client.darwin-x64.node', require('./codechat-editor-client.darwin-x64.node')) + } catch (e) { + loadErrors.push(e) + } + try { + __dbgAttempt('optional dependency package', 'codechat-editor-client-darwin-x64') + const binding = require('codechat-editor-client-darwin-x64') + const bindingPackageVersion = require('codechat-editor-client-darwin-x64/package.json').version + if (bindingPackageVersion !== '0.2.5' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.2.5 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + } + return __dbgOk('codechat-editor-client-darwin-x64', binding) + } catch (e) { + loadErrors.push(e) + } + } else if (process.arch === 'arm64') { + try { + __dbgAttempt('local artifact', './codechat-editor-client.darwin-arm64.node') + return __dbgOk('./codechat-editor-client.darwin-arm64.node', require('./codechat-editor-client.darwin-arm64.node')) + } catch (e) { + loadErrors.push(e) + } + try { + __dbgAttempt('optional dependency package', 'codechat-editor-client-darwin-arm64') + const binding = require('codechat-editor-client-darwin-arm64') + const bindingPackageVersion = require('codechat-editor-client-darwin-arm64/package.json').version + if (bindingPackageVersion !== '0.2.5' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.2.5 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + } + return __dbgOk('codechat-editor-client-darwin-arm64', binding) + } catch (e) { + loadErrors.push(e) + } + } else { + loadErrors.push(new Error(`Unsupported architecture on macOS: ${process.arch}`)) + } + } else if (process.platform === 'freebsd') { + if (process.arch === 'x64') { + try { + __dbgAttempt('local artifact', './codechat-editor-client.freebsd-x64.node') + return __dbgOk('./codechat-editor-client.freebsd-x64.node', require('./codechat-editor-client.freebsd-x64.node')) + } catch (e) { + loadErrors.push(e) + } + try { + __dbgAttempt('optional dependency package', 'codechat-editor-client-freebsd-x64') + const binding = require('codechat-editor-client-freebsd-x64') + const bindingPackageVersion = require('codechat-editor-client-freebsd-x64/package.json').version + if (bindingPackageVersion !== '0.2.5' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.2.5 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + } + return __dbgOk('codechat-editor-client-freebsd-x64', binding) + } catch (e) { + loadErrors.push(e) + } + } else if (process.arch === 'arm64') { + try { + __dbgAttempt('local artifact', './codechat-editor-client.freebsd-arm64.node') + return __dbgOk('./codechat-editor-client.freebsd-arm64.node', require('./codechat-editor-client.freebsd-arm64.node')) + } catch (e) { + loadErrors.push(e) + } + try { + __dbgAttempt('optional dependency package', 'codechat-editor-client-freebsd-arm64') + const binding = require('codechat-editor-client-freebsd-arm64') + const bindingPackageVersion = require('codechat-editor-client-freebsd-arm64/package.json').version + if (bindingPackageVersion !== '0.2.5' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.2.5 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + } + return __dbgOk('codechat-editor-client-freebsd-arm64', binding) + } catch (e) { + loadErrors.push(e) + } + } else { + loadErrors.push(new Error(`Unsupported architecture on FreeBSD: ${process.arch}`)) + } + } else if (process.platform === 'linux') { + if (process.arch === 'x64') { + if (isMusl()) { + try { + __dbgAttempt('local artifact', './codechat-editor-client.linux-x64-musl.node') + return __dbgOk('./codechat-editor-client.linux-x64-musl.node', require('./codechat-editor-client.linux-x64-musl.node')) + } catch (e) { + loadErrors.push(e) + } + try { + __dbgAttempt('optional dependency package', 'codechat-editor-client-linux-x64-musl') + const binding = require('codechat-editor-client-linux-x64-musl') + const bindingPackageVersion = require('codechat-editor-client-linux-x64-musl/package.json').version + if (bindingPackageVersion !== '0.2.5' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.2.5 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + } + return __dbgOk('codechat-editor-client-linux-x64-musl', binding) + } catch (e) { + loadErrors.push(e) + } + } else { + try { + __dbgAttempt('local artifact', './codechat-editor-client.linux-x64-gnu.node') + return __dbgOk('./codechat-editor-client.linux-x64-gnu.node', require('./codechat-editor-client.linux-x64-gnu.node')) + } catch (e) { + loadErrors.push(e) + } + try { + __dbgAttempt('optional dependency package', 'codechat-editor-client-linux-x64-gnu') + const binding = require('codechat-editor-client-linux-x64-gnu') + const bindingPackageVersion = require('codechat-editor-client-linux-x64-gnu/package.json').version + if (bindingPackageVersion !== '0.2.5' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.2.5 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + } + return __dbgOk('codechat-editor-client-linux-x64-gnu', binding) + } catch (e) { + loadErrors.push(e) + } + } + } else if (process.arch === 'arm64') { + if (isMusl()) { + try { + __dbgAttempt('local artifact', './codechat-editor-client.linux-arm64-musl.node') + return __dbgOk('./codechat-editor-client.linux-arm64-musl.node', require('./codechat-editor-client.linux-arm64-musl.node')) + } catch (e) { + loadErrors.push(e) + } + try { + __dbgAttempt('optional dependency package', 'codechat-editor-client-linux-arm64-musl') + const binding = require('codechat-editor-client-linux-arm64-musl') + const bindingPackageVersion = require('codechat-editor-client-linux-arm64-musl/package.json').version + if (bindingPackageVersion !== '0.2.5' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.2.5 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + } + return __dbgOk('codechat-editor-client-linux-arm64-musl', binding) + } catch (e) { + loadErrors.push(e) + } + } else { + try { + __dbgAttempt('local artifact', './codechat-editor-client.linux-arm64-gnu.node') + return __dbgOk('./codechat-editor-client.linux-arm64-gnu.node', require('./codechat-editor-client.linux-arm64-gnu.node')) + } catch (e) { + loadErrors.push(e) + } + try { + __dbgAttempt('optional dependency package', 'codechat-editor-client-linux-arm64-gnu') + const binding = require('codechat-editor-client-linux-arm64-gnu') + const bindingPackageVersion = require('codechat-editor-client-linux-arm64-gnu/package.json').version + if (bindingPackageVersion !== '0.2.5' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.2.5 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + } + return __dbgOk('codechat-editor-client-linux-arm64-gnu', binding) + } catch (e) { + loadErrors.push(e) + } + } + } else if (process.arch === 'arm') { + if (isMusl()) { + try { + __dbgAttempt('local artifact', './codechat-editor-client.linux-arm-musleabihf.node') + return __dbgOk('./codechat-editor-client.linux-arm-musleabihf.node', require('./codechat-editor-client.linux-arm-musleabihf.node')) + } catch (e) { + loadErrors.push(e) + } + try { + __dbgAttempt('optional dependency package', 'codechat-editor-client-linux-arm-musleabihf') + const binding = require('codechat-editor-client-linux-arm-musleabihf') + const bindingPackageVersion = require('codechat-editor-client-linux-arm-musleabihf/package.json').version + if (bindingPackageVersion !== '0.2.5' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.2.5 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + } + return __dbgOk('codechat-editor-client-linux-arm-musleabihf', binding) + } catch (e) { + loadErrors.push(e) + } + } else { + try { + __dbgAttempt('local artifact', './codechat-editor-client.linux-arm-gnueabihf.node') + return __dbgOk('./codechat-editor-client.linux-arm-gnueabihf.node', require('./codechat-editor-client.linux-arm-gnueabihf.node')) + } catch (e) { + loadErrors.push(e) + } + try { + __dbgAttempt('optional dependency package', 'codechat-editor-client-linux-arm-gnueabihf') + const binding = require('codechat-editor-client-linux-arm-gnueabihf') + const bindingPackageVersion = require('codechat-editor-client-linux-arm-gnueabihf/package.json').version + if (bindingPackageVersion !== '0.2.5' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.2.5 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + } + return __dbgOk('codechat-editor-client-linux-arm-gnueabihf', binding) + } catch (e) { + loadErrors.push(e) + } + } + } else if (process.arch === 'loong64') { + if (isMusl()) { + try { + __dbgAttempt('local artifact', './codechat-editor-client.linux-loong64-musl.node') + return __dbgOk('./codechat-editor-client.linux-loong64-musl.node', require('./codechat-editor-client.linux-loong64-musl.node')) + } catch (e) { + loadErrors.push(e) + } + try { + __dbgAttempt('optional dependency package', 'codechat-editor-client-linux-loong64-musl') + const binding = require('codechat-editor-client-linux-loong64-musl') + const bindingPackageVersion = require('codechat-editor-client-linux-loong64-musl/package.json').version + if (bindingPackageVersion !== '0.2.5' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.2.5 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + } + return __dbgOk('codechat-editor-client-linux-loong64-musl', binding) + } catch (e) { + loadErrors.push(e) + } + } else { + try { + __dbgAttempt('local artifact', './codechat-editor-client.linux-loong64-gnu.node') + return __dbgOk('./codechat-editor-client.linux-loong64-gnu.node', require('./codechat-editor-client.linux-loong64-gnu.node')) + } catch (e) { + loadErrors.push(e) + } + try { + __dbgAttempt('optional dependency package', 'codechat-editor-client-linux-loong64-gnu') + const binding = require('codechat-editor-client-linux-loong64-gnu') + const bindingPackageVersion = require('codechat-editor-client-linux-loong64-gnu/package.json').version + if (bindingPackageVersion !== '0.2.5' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.2.5 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + } + return __dbgOk('codechat-editor-client-linux-loong64-gnu', binding) + } catch (e) { + loadErrors.push(e) + } + } + } else if (process.arch === 'riscv64') { + if (isMusl()) { + try { + __dbgAttempt('local artifact', './codechat-editor-client.linux-riscv64-musl.node') + return __dbgOk('./codechat-editor-client.linux-riscv64-musl.node', require('./codechat-editor-client.linux-riscv64-musl.node')) + } catch (e) { + loadErrors.push(e) + } + try { + __dbgAttempt('optional dependency package', 'codechat-editor-client-linux-riscv64-musl') + const binding = require('codechat-editor-client-linux-riscv64-musl') + const bindingPackageVersion = require('codechat-editor-client-linux-riscv64-musl/package.json').version + if (bindingPackageVersion !== '0.2.5' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.2.5 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + } + return __dbgOk('codechat-editor-client-linux-riscv64-musl', binding) + } catch (e) { + loadErrors.push(e) + } + } else { + try { + __dbgAttempt('local artifact', './codechat-editor-client.linux-riscv64-gnu.node') + return __dbgOk('./codechat-editor-client.linux-riscv64-gnu.node', require('./codechat-editor-client.linux-riscv64-gnu.node')) + } catch (e) { + loadErrors.push(e) + } + try { + __dbgAttempt('optional dependency package', 'codechat-editor-client-linux-riscv64-gnu') + const binding = require('codechat-editor-client-linux-riscv64-gnu') + const bindingPackageVersion = require('codechat-editor-client-linux-riscv64-gnu/package.json').version + if (bindingPackageVersion !== '0.2.5' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.2.5 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + } + return __dbgOk('codechat-editor-client-linux-riscv64-gnu', binding) + } catch (e) { + loadErrors.push(e) + } + } + } else if (process.arch === 'ppc64') { + try { + __dbgAttempt('local artifact', './codechat-editor-client.linux-ppc64-gnu.node') + return __dbgOk('./codechat-editor-client.linux-ppc64-gnu.node', require('./codechat-editor-client.linux-ppc64-gnu.node')) + } catch (e) { + loadErrors.push(e) + } + try { + __dbgAttempt('optional dependency package', 'codechat-editor-client-linux-ppc64-gnu') + const binding = require('codechat-editor-client-linux-ppc64-gnu') + const bindingPackageVersion = require('codechat-editor-client-linux-ppc64-gnu/package.json').version + if (bindingPackageVersion !== '0.2.5' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.2.5 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + } + return __dbgOk('codechat-editor-client-linux-ppc64-gnu', binding) + } catch (e) { + loadErrors.push(e) + } + } else if (process.arch === 's390x') { + try { + __dbgAttempt('local artifact', './codechat-editor-client.linux-s390x-gnu.node') + return __dbgOk('./codechat-editor-client.linux-s390x-gnu.node', require('./codechat-editor-client.linux-s390x-gnu.node')) + } catch (e) { + loadErrors.push(e) + } + try { + __dbgAttempt('optional dependency package', 'codechat-editor-client-linux-s390x-gnu') + const binding = require('codechat-editor-client-linux-s390x-gnu') + const bindingPackageVersion = require('codechat-editor-client-linux-s390x-gnu/package.json').version + if (bindingPackageVersion !== '0.2.5' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.2.5 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + } + return __dbgOk('codechat-editor-client-linux-s390x-gnu', binding) + } catch (e) { + loadErrors.push(e) + } + } else { + loadErrors.push(new Error(`Unsupported architecture on Linux: ${process.arch}`)) + } + } else if (process.platform === 'openharmony') { + if (process.arch === 'arm64') { + try { + __dbgAttempt('local artifact', './codechat-editor-client.openharmony-arm64.node') + return __dbgOk('./codechat-editor-client.openharmony-arm64.node', require('./codechat-editor-client.openharmony-arm64.node')) + } catch (e) { + loadErrors.push(e) + } + try { + __dbgAttempt('optional dependency package', 'codechat-editor-client-openharmony-arm64') + const binding = require('codechat-editor-client-openharmony-arm64') + const bindingPackageVersion = require('codechat-editor-client-openharmony-arm64/package.json').version + if (bindingPackageVersion !== '0.2.5' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.2.5 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + } + return __dbgOk('codechat-editor-client-openharmony-arm64', binding) + } catch (e) { + loadErrors.push(e) + } + } else if (process.arch === 'x64') { + try { + __dbgAttempt('local artifact', './codechat-editor-client.openharmony-x64.node') + return __dbgOk('./codechat-editor-client.openharmony-x64.node', require('./codechat-editor-client.openharmony-x64.node')) + } catch (e) { + loadErrors.push(e) + } + try { + __dbgAttempt('optional dependency package', 'codechat-editor-client-openharmony-x64') + const binding = require('codechat-editor-client-openharmony-x64') + const bindingPackageVersion = require('codechat-editor-client-openharmony-x64/package.json').version + if (bindingPackageVersion !== '0.2.5' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.2.5 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + } + return __dbgOk('codechat-editor-client-openharmony-x64', binding) + } catch (e) { + loadErrors.push(e) + } + } else if (process.arch === 'arm') { + try { + __dbgAttempt('local artifact', './codechat-editor-client.openharmony-arm.node') + return __dbgOk('./codechat-editor-client.openharmony-arm.node', require('./codechat-editor-client.openharmony-arm.node')) + } catch (e) { + loadErrors.push(e) + } + try { + __dbgAttempt('optional dependency package', 'codechat-editor-client-openharmony-arm') + const binding = require('codechat-editor-client-openharmony-arm') + const bindingPackageVersion = require('codechat-editor-client-openharmony-arm/package.json').version + if (bindingPackageVersion !== '0.2.5' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.2.5 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + } + return __dbgOk('codechat-editor-client-openharmony-arm', binding) + } catch (e) { + loadErrors.push(e) + } + } else { + loadErrors.push(new Error(`Unsupported architecture on OpenHarmony: ${process.arch}`)) + } + } else { + loadErrors.push(new Error(`Unsupported OS: ${process.platform}, architecture: ${process.arch}`)) + } +} + +function createLoadErrorChain(errors) { + return errors.reduce((previous, current) => { + let message + try { + message = + current && typeof current.message === 'string' + ? current.message + : String(current) + } catch { + message = 'Unknown error' + } + const error = new Error(message) + error.cause = previous + return error + }, null) +} + +// NAPI_RS_FORCE_WASI is a tri-state flag: +// unset / any other value → native binding preferred, WASI is only a fallback +// 'true' → prefer WASI, but retain native as a lazy fallback +// 'error' → require WASI without initializing a native fallback +// Treating any non-empty string as truthy (the historical behavior) meant +// NAPI_RS_FORCE_WASI=false, NAPI_RS_FORCE_WASI=0, etc. inadvertently triggered +// the WASI path, causing ENOENT for packages shipped without a .wasi.cjs file. +// +// NAPI_RS_WASI_FLAVOR selects one exact generated flavor and implies strict +// WASI loading. It never crosses into another flavor or falls back to native. +const __napiWasiFlavors = ['wasm32-wasi'] +const __napiWasiFlavor = process.env.NAPI_RS_WASI_FLAVOR +const __napiWasiFlavorRequested = + typeof __napiWasiFlavor === 'string' && __napiWasiFlavor.length > 0 +if ( + __napiWasiFlavorRequested && + __napiWasiFlavors.indexOf(__napiWasiFlavor) === -1 +) { + throw new Error( + 'Unsupported WASI flavor "' + + __napiWasiFlavor + + '". Available flavors: ' + + __napiWasiFlavors.join(', '), + ) +} +const forceWasiError = process.env.NAPI_RS_FORCE_WASI === 'error' +const forceWasi = + process.env.NAPI_RS_FORCE_WASI === 'true' || + forceWasiError || + __napiWasiFlavorRequested + +__dbg( + `WASI selection: forceWasi=${forceWasi} forceWasiError=${forceWasiError} flavorRequested=${__napiWasiFlavorRequested} flavor=${__napiWasiFlavor || ''}`, +) +if (!forceWasi) { + nativeBinding = requireNative() + __dbg(`requireNative() returned ${nativeBinding ? 'a binding' : 'nothing'}`) +} else { + __dbg('skipping the native chain: WASI was forced') +} + +if (!nativeBinding || forceWasi) { + __dbg('entering the WASI fallback chain') + let wasiBinding = null + let wasiBindingLoaded = false + const wasiBindingErrors = __dbgTracedArray('wasiBindingErrors') + const __napiWasiResolveCandidate = (specifier, isPackage, localArtifacts) => { + try { + require.resolve(specifier) + } catch (resolveError) { + if (!resolveError || resolveError.code !== 'MODULE_NOT_FOUND') { + throw resolveError + } + if (isPackage) { + try { + require.resolve(specifier + '/package.json') + } catch (packageError) { + if (packageError && packageError.code === 'MODULE_NOT_FOUND') { + return resolveError + } + // An exports restriction proves the package exists even when its + // package.json is not public. Preserve the root resolution failure. + throw resolveError + } + // The package exists but its main/export target is broken. + throw resolveError + } + return resolveError + } + if (localArtifacts) { + let artifactError = null + for (let i = 0; i < localArtifacts.length; i++) { + try { + require.resolve(localArtifacts[i]) + return null + } catch (resolveError) { + if (!resolveError || resolveError.code !== 'MODULE_NOT_FOUND') { + throw resolveError + } + artifactError = resolveError + } + } + return artifactError + } + return null + } + if (!wasiBindingLoaded && (!__napiWasiFlavorRequested || __napiWasiFlavor === 'wasm32-wasi')) { + let candidateError = null + let candidateFailed = false + try { + candidateError = __napiWasiResolveCandidate('./codechat-editor-client.wasi.cjs', false, ['./codechat-editor-client.wasm32-wasi.debug.wasm', './codechat-editor-client.wasm32-wasi.wasm']) + candidateFailed = candidateError !== null + if (!candidateFailed) { + __dbgAttempt('WASI local artifact', './codechat-editor-client.wasi.cjs') + wasiBinding = __dbgOk( + './codechat-editor-client.wasi.cjs', + require('./codechat-editor-client.wasi.cjs'), + ) + nativeBinding = wasiBinding + __napiLoadedBindingTarget = 'wasm32-wasi' + wasiBindingLoaded = true + } + } catch (err) { + candidateError = err + candidateFailed = true + } + if (candidateFailed) { + wasiBindingErrors.push(candidateError) + loadErrors.push(candidateError) + } + } + if (!wasiBindingLoaded && (!__napiWasiFlavorRequested || __napiWasiFlavor === 'wasm32-wasi')) { + let candidateError = null + let candidateFailed = false + try { + candidateError = __napiWasiResolveCandidate('codechat-editor-client-wasm32-wasi', true, undefined) + candidateFailed = candidateError !== null + if (!candidateFailed) { + if (process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + const bindingPackageVersion = require('codechat-editor-client-wasm32-wasi/package.json').version + if (bindingPackageVersion !== '0.2.5') { + throw new Error(`WASI binding package version mismatch, expected 0.2.5 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + } + } + __dbgAttempt('WASI package', 'codechat-editor-client-wasm32-wasi') + wasiBinding = __dbgOk( + 'codechat-editor-client-wasm32-wasi', + require('codechat-editor-client-wasm32-wasi'), + ) + nativeBinding = wasiBinding + __napiLoadedBindingTarget = 'wasm32-wasi' + wasiBindingLoaded = true + } + } catch (err) { + candidateError = err + candidateFailed = true + } + if (candidateFailed) { + wasiBindingErrors.push(candidateError) + loadErrors.push(candidateError) + } + } + if ( + !wasiBindingLoaded && + forceWasi && + !forceWasiError && + !__napiWasiFlavorRequested + ) { + __dbg('WASI was preferred but not found; retrying the native chain') + nativeBinding = requireNative() + } + if ((forceWasiError || __napiWasiFlavorRequested) && !wasiBindingLoaded) { + const error = new Error( + __napiWasiFlavorRequested + ? 'WASI binding for flavor "' + __napiWasiFlavor + '" not found' + : 'WASI binding not found and NAPI_RS_FORCE_WASI is set to error', + ) + __dbgChain('WASI load failed', wasiBindingErrors) + __dbg(`THROWING: ${error.message}`) + error.cause = createLoadErrorChain(wasiBindingErrors) + throw error + } +} + +__dbg( + `binding resolution finished: ${nativeBinding ? 'SUCCESS' : 'FAILURE'}, target=${__napiLoadedBindingTarget}`, +) +if (!nativeBinding) { + if (loadErrors.length > 0) { + const error = new Error( + `Cannot find native binding. ` + + `npm has a bug related to optional dependencies (https://github.com/npm/cli/issues/4828). ` + + 'Please try `npm i` again after removing both package-lock.json and node_modules directory.', + ) + // assign instead of the `new Error(message, { cause })` options form, + // which Node < 16.9 silently ignores + __dbgChain('every load attempt failed', loadErrors) + __dbg(`THROWING: ${error.message}`) + error.cause = createLoadErrorChain(loadErrors) + throw error + } + __dbg('THROWING: Failed to load native binding, with no attempt recorded') + throw new Error(`Failed to load native binding`) +} + +function __napiStampBindingTarget(exportsObject, target) { + if ( + Object.prototype.hasOwnProperty.call(exportsObject, '__napiBindingTarget') + ) { + if (exportsObject.__napiBindingTarget === target) { + // Already ours: the root entry aliases the object it loaded, so a WASI + // fallback candidate — or a `NAPI_RS_NATIVE_LIBRARY_PATH` override that + // is a generated loader — arrives already stamped with this same value. + return target + } + const error = new Error( + '`__napiBindingTarget` is reserved by the generated binding loader, but the loaded binding already exports it. Rename the export, e.g. #[napi(js_name = "...")].', + ) + error.code = 'ERR_NAPI_BINDING_TARGET_CONFLICT' + throw error + } + if (!Object.isExtensible(exportsObject)) { + // A `#[napi(module_exports)]` hook may seal or freeze this object + // (`Object::seal` / `Object::freeze`). Reporting the artifact is metadata, + // never a reason to fail an otherwise successful load, so the stamp is + // skipped. What a consumer still sees then follows the entry point: the + // browser and deferred loaders declare `__napiBindingTarget` at module + // level and go on reporting it, while the CommonJS entries hand back this + // very object as `module.exports`, so there the value is absent. + return target + } + try { + // [[Define]], not [[Set]]: an ordinary assignment walks the prototype + // chain, so an inherited accessor could swallow the value or throw and + // fail an otherwise successful load. The descriptor is what a successful + // assignment would have produced. + Object.defineProperty(exportsObject, '__napiBindingTarget', { + configurable: true, + enumerable: true, + value: target, + writable: true, + }) + } catch { + // Same rule as the non-extensible skip above: reporting the artifact is + // metadata, never a reason to fail an otherwise successful load. An exotic + // object (a Proxy whose defineProperty trap refuses) is skipped, not + // thrown over. + } + // The CommonJS loaders assign this return value so `cjs-module-lexer` — and + // therefore Node's CJS -> ESM named export detection — can see + // `__napiBindingTarget` statically. + return target +} +// Stamp before the alias, not after. The guard only reads `nativeBinding` +// (`hasOwnProperty` plus a comparison), which is safe against any addon +// accessor; an assignment is not, because a `#[napi(module_exports)]` hook can +// expose a getter reporting this very value and a setter that throws. So the +// assignment lands on the loader's own `module.exports`, still the original +// object here, and the alias below replaces it. +// +// The assignment is what keeps the marker a statically visible CommonJS export: +// `cjs-module-lexer` is Node's CJS -> ESM named export detection, it cannot see +// a bare call, and the later `module.exports = nativeBinding` does not undo the +// detection. The assignment itself always succeeds — its target is this +// loader's own, still extensible `module.exports` — and the alias below then +// discards the value it wrote. What a consumer reads is whatever the guard put +// on `nativeBinding`, so on a frozen binding, where the guard skips, the +// linked import resolves to `undefined`. +module.exports.__napiBindingTarget = __napiStampBindingTarget(nativeBinding, __napiLoadedBindingTarget) +module.exports = nativeBinding +module.exports.CodeChatEditorServer = nativeBinding.CodeChatEditorServer +module.exports.initServer = nativeBinding.initServer + +__dbg( + `exports check: CodeChatEditorServer=${typeof nativeBinding.CodeChatEditorServer} initServer=${typeof nativeBinding.initServer}`, +) +__dbg('==== binding load finished ====') diff --git a/server/src/processing.rs b/server/src/processing.rs index 4b4f3b33..be899c5e 100644 --- a/server/src/processing.rs +++ b/server/src/processing.rs @@ -2340,7 +2340,9 @@ fn hydrating_walk_node(node: &Rc, mut walk_context: WalkContext) -> io::Re id: id.clone(), line: 0, doc_block_start_index: walk_context.doc_block_index, - code_doc_block_end_index: walk_context.doc_block_index + following, + code_doc_block_end_index: walk_context + .doc_block_index + .saturating_add(following), }); } walk_context.fragments.push(FragmentHydration { diff --git a/server/src/processing/cache-spec.md b/server/src/processing/cache-spec.md new file mode 100644 index 00000000..0906ea59 --- /dev/null +++ b/server/src/processing/cache-spec.md @@ -0,0 +1,285 @@ +Cache spec +========== + +The cache stores the location (file name and ID) and contents (inner HTML or +code/doc blocks for fragments) of a target. Targets are HTML elements (excluding +``s) with an ID. + +The goal of the cache is to support cross-references and gather elements, and to +ensure that all IDs are unique within a project. This means that +cross-references and gather elements persist across moving or renaming files, +since the IDs will be found in the cache. + +Non-project files support a subset of this functionality: the "project" consists +only of the current file. Only targets, gather elements, cross-references, and +fragments to items within the file work as expected; references to other files +do not. + +The cache reflects data read directly from disk/IDE; content edited in the +Client does not update the cache until it's written to disk/IDE, at which point +the cache much re-process this unknown file. Since the Client is designed around +an autosave principle which updates disk/IDE regularly, there's little gap +between the two. + +The cache hydrates data to the Client; the dehydration routes are responsible +for removing all cache hydration artifacts. + +Cross references +---------------- + +A `` is a cross reference to a `Target` or a gather +element. The `id` specifies the destination; the cache then hydrates the +contents based on the location and contents of the target of the provided `id` +to e.g. `Inner HTML from target`; this hydrated form +is only present in the Client. + +Details: + +* This element does not allow an `id` attribute. + +* The inner HTML is always taken before cache hydration, to prevent circular + dependencies: + + ```html +

See

+ +

See

+ + ``` + + Including cache hydration would cause the inner HTML to be updated each time + the file is processed, outdating the other file. + +* If the `id` referred to isn't found or refers to a duplicate id, the inner + text is instead an appropriate error message. + +* If the cross reference is to a gather element, the text is the gather + element's inner HTML, not the gathered code/doc blocks. + +Fragments and gather elements +----------------------------- + +A gather element such as `

Bazzy +things

` is a `Target` with the `data-gather` attribute. It becomes a list +of the contents of fragments it refers to after hydration by the cache. An +example fragment tag, after cache hydration: `See Bazzy things, Zappy things`. A fragment's +content by default includes the contents of the current doc block and the +contents of the following code/doc block; fragments are not allowed in Markdown +documents (in the case, the fragment contents consist of an error message). +Fragments may include the `following` attribute to enclose a specific number of +the following code/doc blocks; for example, `` includes the current doc block along with the next 3 +code/doc blocks; `following` must be a whole number. + +Details: + +* Fragment contents may not include a gather element; in this case, the gather + element list of contents will simply include an error message. +* Fragments do support indirection: gather element A includes contents from + fragment B, which contains a cross reference to target C. Changes to target C + makes B and A outdated. +* If a gather element refers to an `id` that is a `Target` or a `GatherElement`, + not a `Fragment`, the resulting output for this in the list of fragments is an + error message. +* If a gather element refers to an `id` that wasn't found or is a duplicate, its + contents will be replaced by an error message. +* Fragments store an HTML rendering of the code and doc blocks they contain, + excluding the content produced by hydrating the `` tags, to avoid + duplication and circular dependencies. See layer 4 under `Design`: this + exclusion is what keeps a gather element and the fragments it lists from + outdating each other forever. The HTML rendering of a fragment reproduces the + layout of the source it came from: each doc block includes its indent, each + line of a code block is preceded by that line's number, and the two are + aligned -- a doc block and a line of code indented equally in the source begin + in the same column, with the line numbers in a gutter of their own to the left + of both. +* The backlinks a `` hydrates to are derived from the gather elements + which list it: for each such element, its containing file, its `id`, and its + inner HTML (the link text). A fragment's rendered output therefore depends on + the gather elements which reference it -- the reverse of the direction in + which references are written; see `Design`. +* A `` is valid; it contains only the current doc block. +* The `following` attribute is clamped if it would exceed the number of code/doc + blocks in the document. +* If the `following` value cannot be parsed to a whole number, an error message + replaces the fragment content. +* A gather element, as a type of `Target`, requires an `id`. A `data-gather` + attribute on an element without an `id` produces an error message which + requests the missing `id`. +* All ids must be valid + [CSS identifiers](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/es/ident) + per + [MDN recommendations](https://developer.mozilla.org/en-US/docs/Web/HTML/rence/Global_attributes/id). + Invalid ids produce error messages in the hydrated tag content. + +Example hydration of the gather tag `

Bazzy +things

`: + +```html +

Bazzy things

+
+ + (first item content) ... + + (last item content) +
+``` + +Search +------ + +The cache supports searching the (cleaned) inner HTML of all `Target`s and +gather elements; search does not include `Fragment` contents. + +### Auto-assignment of ids + +If `id="*"` on either a fragment, target, or gather element, the cache replaces +this with an random autogenerated `id` placed in the resulting HTML contents, +but this new `id` is not yet recorded in the cache. The file is then marked as +`Unknown` when it is saved; when re-read, this `id` is then incorporated into +the cache. This helps avoid cases where the cache and file contents become +unsynchronized: if the `id` is placed in the cache before the write and the +write fails, or if the file is never written (it was being scanned, but not +actively edited, so the file contents wasn't written back). + +The autogenerated id must be a valid +[CSS identifier](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/es/ident). +Autogenerated ids must be checked to make sure they don't collide with an +existing id. + +Design +------ + +The cache is a single plain-data structure, shared as an `Arc>`; +all consistency comes from that one lock, so no per-item locking (and therefore +no lock ordering) is needed. Items refer to each other by key -- files by path, +targets and fragments by id -- rather than by `Arc`/`Weak` pointers. This keeps +the structure acyclic, `Send`, and (in the future) serializable, and avoids +garbage-collecting stale weak references. + +Cached state always converges by design. Each layer depends only on +lower-numbered layers: + +1. `Target::inner_html` (including a gather element's) and `Target::gather_ids` + are pure functions of the source (pre-hydration) -- they depend on nothing. +2. `` hydration depends on layer 1 only. +3. `Fragment::content` depends on the source plus layer 2. +4. `` backlink hydration depends on layer 1 only: it renders, for each + gather element which lists this fragment, that element's containing file, + `id`, and inner HTML. Critically, this output is *excluded* from + `Fragment::content` (layer 3); were it included, a gather element and each + fragment it lists would outdate one another forever. +5. Gather-list hydration depends on layers 1 and 3. + +Nothing reads layers 2, 4, or 5, so propagation terminates. + +Updating the cache is a two-phase process: + +1. Collect: while walking a file's DOM, record all cacheable facts + (`FileFacts`) -- targets, cross-references, fragments, and gather elements -- + without touching the cache. This keeps the non-`Send` DOM types out of the + cache and off its critical section. Fact collection ignores content expanded + by the cache (the contents of `xref` and `fragment` tags; the content + following a gather tag). +2. Commit: `Cache::commit_file` applies the facts in one transaction, diffing + them against the file's previous state to compute the set of files outdated + by these changes. + +Item 2 requires the cache to track dependencies of an item, so that files +containing these dependencies can be Outdated. Dependencies are tracked at file +granularity, on the id rather than on the item defining it: +`IdEntry::dependents` is the set of files whose rendered output depends on this +id, by any means -- an `` or a `data-gather` list naming it. One +uniform set suffices in all three `IdState`s because the typical action taken on +a dependent is marking its containing file outdated (fragments also used their +dependents to generate "See x" links). + +Item 2 also requires the cache to define what constitutes a difference which +would trigger outdating dependencies. The state which is checked for differences +is: + +* Target/gather element: type (a target/gather element), path of the containing + file, id, IdState, inner HTML, and gather\_ids. +* Fragment: type (a fragment), path of the containing file, id, IdState, and + contents. + +This also makes indirection (gather A includes fragment B, whose content +cross-references target C) work without extra machinery: a change to C outdates +B's file; reprocessing B's file changes B's content, which outdates A's file. + +### Gather elements: the reverse edge + +`dependents` alone is not enough for gather elements, because the reference runs +in both directions: a gather element renders the *contents* of each fragment it +lists, and each of those fragments renders a *backlink* to the gather element +(see layer 4 above). The set of gather elements referencing a fragment is +therefore not merely bookkeeping -- it is observable output in the fragment's +own file. + +This is why the outgoing references of gather elements cannot be maintained by +the unlink-all/relink-all round trip used for cross-references (see +`commit_file`): that round trip destroys the very information a diff would need. +`commit_file` instead diffs `Target::gather_ids` explicitly, and applies this +rule: + +> When a gather element `G` is committed, outdate the file defining each id in +> the symmetric difference of `G`'s old and new `gather_ids`; if `G`'s inner +> HTML also changed, outdate the file defining each id in the union instead, +> since the backlink text those fragments render comes from it. + +A gather element moving to a different file needs no special case: the old +file's commit sees the element deleted (new `gather_ids` empty) and the new +file's commit sees it added, so both ends of the move outdate the fragments. + +Propagation terminates here for the reason given under layer 4: rebuilding a +fragment's file updates its backlinks, but backlinks are excluded from +`Fragment::content`, so nothing further is outdated. + +An id referenced before (or without) being defined has an `IdEntry` whose state +is `IdState::Missing`; `dependents` holds the files waiting on it. When the id +later appears, the state transition marks those files outdated, and they simply +remain dependents; when a defined id disappears, the state returns to `Missing` +and the dependents are again waiters. An `IdEntry` which is `Missing` with no +dependents carries no information and is removed. + +Duplicate ids are never renamed (file timestamps can't reliably identify the +original, and renaming would silently modify user content). Instead, duplicates +are reported as errors to the user. + +### Misc + +All file names (stored as `PathBuf`) must be canonicalized absolute paths. + +HTML stored as `Target` inner HTML or in `Fragment` contents requires cleaning: + +* To avoid duplicate IDs, all `id` attributes should be stripped. +* Note that images, URLs, etc. may not work if the referring path in their new + location isn't valid; these simply aren't supported. +* Inner HTML must allow only the + [permitted content for an `` element](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/a#technical_summary). + +Watcher and walker +------------------ + +Need a watcher/walker (WW). Each time a project is found, the code must ask for +the cache for this project path. The WW maintains a connection id -> project +path mapping. If the current request doesn't change the mapping, simply return +the existing cache. If the mapping changes, then update the WW thingy. The map +must also be updated when a connection is closed (to remove an existing +mapping). + +The WW thingy is another map from project path -> (cache, vec of project paths +that are contained with this path, including the same path \[when multiple +connections edit the same project\]). Operations: + +* Insert: to insert a new project path, walk all existing top-level project + paths. If the new project path is contained within any of these, add it to the + appropriate list. Otherwise, add a new entry. +* Delete: find the path my looking fir diff --git a/server/src/processing/cache.rs b/server/src/processing/cache.rs index ddfc917d..d2847df2 100644 --- a/server/src/processing/cache.rs +++ b/server/src/processing/cache.rs @@ -21,275 +21,7 @@ //! `cache.rs` -- Keep a cache used to store all targets in a project //! ================================================================= //! -//! The cache stores the location (file name and ID) and contents (inner HTML or -//! code/doc blocks for fragments) of a target. Targets are HTML elements -//! (excluding ``s) with an ID. -//! -//! The goal of the cache is to support cross-references and gather elements, -//! and to ensure that all IDs are unique within a project. This means that -//! cross-references and gather elements persist across moving or renaming -//! files, since the IDs will be found in the cache. -//! -//! Non-project files support a subset of this functionality: the "project" -//! consists only of the current file. Only targets, gather elements, -//! cross-references, and fragments to items within the file work as expected; -//! references to other files do not. -//! -//! The cache reflects data read directly from disk/IDE; content edited in the -//! Client does not update the cache until it's written to disk/IDE, at which -//! point the cache much re-process this unknown file. Since the Client is -//! designed around an autosave principle which updates disk/IDE regularly, -//! there's little gap between the two. -//! -//! The cache hydrates data to the Client; the dehydration routes are -//! responsible for removing all cache hydration artifacts. -//! -//! Cross references -//! ---------------- -//! -//! A `` is a cross reference to a `Target` or a gather -//! element. The `id` specifies the destination; the cache then hydrates the -//! contents based on the location and contents of the target of the provided -//! `id` to e.g. `Inner HTML from target`; this hydrated -//! form is only present in the Client. -//! -//! Details: -//! -//! * This element does not allow an `id` attribute. -//! -//! * The inner HTML is always taken before cache hydration, to prevent circular -//! dependencies: -//! -//! ```html -//!

See

-//!

See

-//! ``` -//! -//! Including cache hydration would cause the inner HTML to be updated each -//! time the file is processed, outdating the other file. -//! -//! * If the `id` referred to isn't found or refers to a duplicate id, the inner -//! text is instead an appropriate error message. -//! -//! * If the cross reference is to a gather element, the text is the gather -//! element's inner HTML, not the gathered code/doc blocks. -//! -//! Fragments and gather elements -//! ----------------------------- -//! -//! A gather element such as `

Bazzy -//! things

` is a `Target` with the `data-gather` attribute. It becomes a -//! list of the contents of fragments it refers to after hydration by the cache. -//! An example fragment tag, after cache hydration: `See Bazzy things, -//! Zappy things`. A -//! fragment's content by default includes the contents of the current doc block -//! and the contents of the following code/doc block; fragments are not allowed -//! in Markdown documents (in the case, the fragment contents consist of an -//! error message). Fragments may include the `following` attribute to enclose a -//! specific number of the following code/doc blocks; for example, `` includes the current doc block along -//! with the next 3 code/doc blocks; `following` must be a whole number. -//! -//! Details: -//! -//! * Fragment contents may not include a gather element; in this case, the -//! gather element list of contents will simply include an error message. -//! * Fragments do support indirection: gather element A includes contents from -//! fragment B, which contains a cross reference to target C. Changes to -//! target C makes B and A outdated. -//! * If a gather element refers to an `id` that is a `Target` or a -//! `GatherElement`, not a `Fragment`, the resulting output for this in the -//! list of fragments is an error message. -//! * If a gather element refers to an `id` that wasn't found or is a duplicate, -//! its contents will be replaced by an error message. -//! * Fragments store an HTML rendering of the code and doc blocks they contain, -//! excluding the content produced by hydrating the `` tags, to -//! avoid duplication and circular dependencies. See layer 4 under `Design`: -//! this exclusion is what keeps a gather element and the fragments it lists -//! from outdating each other forever. The HTML rendering of a fragment -//! reproduces the layout of the source it came from: each doc block includes -//! its indent, each line of a code block is preceded by that line's number, -//! and the two are aligned -- a doc block and a line of code indented -//! equally in the source begin in the same column, with the line numbers in -//! a gutter of their own to the left of both. -//! * The backlinks a `` hydrates to are derived from the gather -//! elements which list it: for each such element, its containing file, its -//! `id`, and its inner HTML (the link text). A fragment's rendered output -//! therefore depends on the gather elements which reference it -- the reverse -//! of the direction in which references are written; see `Design`. -//! * A `` is valid; it contains only the current doc -//! block. -//! * The `following` attribute is clamped if it would exceed the number of -//! code/doc blocks in the document. -//! * If the `following` value cannot be parsed to a whole number, an error -//! message replaces the fragment content. -//! * A gather element, as a type of `Target`, requires an `id`. A `data-gather` -//! attribute on an element without an `id` produces an error message which -//! requests the missing `id`. -//! * All ids must be valid -//! [CSS identifiers](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/ident) -//! per -//! [MDN recommendations](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Global_attributes/id). -//! Invalid ids produce error messages in the hydrated tag content. -//! -//! Example hydration of the gather tag `

Bazzy things

`: -//! -//! ```html -//!

-//! Bazzy things -//!

-//!
-//! -//! (first item content) -//! ... -//! -//! (last item content) -//!
-//! ``` -//! -//! Search -//! ------ -//! -//! The cache supports searching the (cleaned) inner HTML of all `Target`s and -//! gather elements; search does not include `Fragment` contents. -//! -//! ### Auto-assignment of ids -//! -//! If `id="*"` on either a fragment, target, or gather element, the cache -//! replaces this with an random autogenerated `id` placed in the resulting HTML -//! contents, but this new `id` is not yet recorded in the cache. The file is -//! then marked as `Unknown` when it is saved; when re-read, this `id` is then -//! incorporated into the cache. This helps avoid cases where the cache and file -//! contents become unsynchronized: if the `id` is placed in the cache before -//! the write and the write fails, or if the file is never written (it was being -//! scanned, but not actively edited, so the file contents wasn't written back). -//! -//! The autogenerated id must be a valid -//! [CSS identifier](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/ident). -//! Autogenerated ids must be checked to make sure they don't collide with an -//! existing id. -//! -//! Design -//! ------ -//! -//! The cache is a single plain-data structure, shared as an -//! `Arc>`; all consistency comes from that one lock, so no -//! per-item locking (and therefore no lock ordering) is needed. Items refer to -//! each other by key -- files by path, targets and fragments by id -- rather -//! than by `Arc`/`Weak` pointers. This keeps the structure acyclic, `Send`, and -//! (in the future) serializable, and avoids garbage-collecting stale weak -//! references. -//! -//! Cached state always converges by design. Each layer depends only on -//! lower-numbered layers: -//! -//! 1. `Target::inner_html` (including a gather element's) and -//! `Target::gather_ids` are pure functions of the source (pre-hydration) -- -//! they depend on nothing. -//! 2. `` hydration depends on layer 1 only. -//! 3. `Fragment::content` depends on the source plus layer 2. -//! 4. `` backlink hydration depends on layer 1 only: it renders, for -//! each gather element which lists this fragment, that element's containing -//! file, `id`, and inner HTML. Critically, this output is *excluded* from -//! `Fragment::content` (layer 3); were it included, a gather element and -//! each fragment it lists would outdate one another forever. -//! 5. Gather-list hydration depends on layers 1 and 3. -//! -//! Nothing reads layers 2, 4, or 5, so propagation terminates. -//! -//! Updating the cache is a two-phase process: -//! -//! 1. Collect: while walking a file's DOM, record all cacheable facts -//! (`FileFacts`) -- targets, cross-references, fragments, and gather -//! elements -- without touching the cache. This keeps the non-`Send` DOM -//! types out of the cache and off its critical section. Fact collection -//! ignores content expanded by the cache (the contents of `xref` and -//! `fragment` tags; the content following a gather tag). -//! 2. Commit: `Cache::commit_file` applies the facts in one transaction, -//! diffing them against the file's previous state to compute the set of -//! files outdated by these changes. -//! -//! Item 2 requires the cache to track dependencies of an item, so that files -//! containing these dependencies can be Outdated. Dependencies are tracked at -//! file granularity, on the id rather than on the item defining it: -//! `IdEntry::dependents` is the set of files whose rendered output depends on -//! this id, by any means -- an `` or a `data-gather` list naming -//! it. One uniform set suffices in all three `IdState`s because the typical -//! action taken on a dependent is marking its containing file outdated -//! (fragments also used their dependents to generate "See x" links). -//! -//! Item 2 also requires the cache to define what constitutes a difference which -//! would trigger outdating dependencies. The state which is checked for -//! differences is: -//! -//! * Target/gather element: type (a target/gather element), path of the -//! containing file, id, IdState, inner HTML, and gather\_ids. -//! * Fragment: type (a fragment), path of the containing file, id, IdState, and -//! contents. -//! -//! This also makes indirection (gather A includes fragment B, whose content -//! cross-references target C) work without extra machinery: a change to C -//! outdates B's file; reprocessing B's file changes B's content, which outdates -//! A's file. -//! -//! ### Gather elements: the reverse edge -//! -//! `dependents` alone is not enough for gather elements, because the reference -//! runs in both directions: a gather element renders the *contents* of each -//! fragment it lists, and each of those fragments renders a *backlink* to the -//! gather element (see layer 4 above). The set of gather elements referencing a -//! fragment is therefore not merely bookkeeping -- it is observable output in -//! the fragment's own file. -//! -//! This is why the outgoing references of gather elements cannot be maintained -//! by the unlink-all/relink-all round trip used for cross-references (see -//! `commit_file`): that round trip destroys the very information a diff would -//! need. `commit_file` instead diffs `Target::gather_ids` explicitly, and -//! applies this rule: -//! -//! > When a gather element `G` is committed, outdate the file defining each id -//! > in the symmetric difference of `G`'s old and new `gather_ids`; if `G`'s -//! > inner HTML also changed, outdate the file defining each id in the union -//! > instead, since the backlink text those fragments render comes from it. -//! -//! A gather element moving to a different file needs no special case: the old -//! file's commit sees the element deleted (new `gather_ids` empty) and the new -//! file's commit sees it added, so both ends of the move outdate the fragments. -//! -//! Propagation terminates here for the reason given under layer 4: rebuilding a -//! fragment's file updates its backlinks, but backlinks are excluded from -//! `Fragment::content`, so nothing further is outdated. -//! -//! An id referenced before (or without) being defined has an `IdEntry` whose -//! state is `IdState::Missing`; `dependents` holds the files waiting on it. -//! When the id later appears, the state transition marks those files outdated, -//! and they simply remain dependents; when a defined id disappears, the state -//! returns to `Missing` and the dependents are again waiters. An `IdEntry` -//! which is `Missing` with no dependents carries no information and is removed. -//! -//! Duplicate ids are never renamed (file timestamps can't reliably identify the -//! original, and renaming would silently modify user content). Instead, -//! duplicates are reported as errors to the user. -//! -//! ### Misc -//! -//! All file names (stored as `PathBuf`) must be canonicalized absolute paths. -//! -//! HTML stored as `Target` inner HTML or in `Fragment` contents requires -//! cleaning: -//! -//! * To avoid duplicate IDs, all `id` attributes should be stripped. -//! * Note that images, URLs, etc. may not work if the referring path in their -//! new location isn't valid; these simply aren't supported. -//! * Inner HTML must allow only the -//! [permitted content for an `` element](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/a#technical_summary). +//! See the [cache spec](cache-spec.md). // Imports // ------- // @@ -827,9 +559,9 @@ impl Cache { outcome } - /// Record that a file's cached content no longer reflects the file itself - /// -- it's been written or modified since it was last processed -- which - /// queues it in `pending_files` for reprocessing. This is how an id + /// Record that a file's cached content no longer reflects the file + /// itself -- it's been written or modified since it was last processed -- + /// which queues it in `pending_files` for reprocessing. This is how an id /// auto-assigned during hydration reaches the cache: the assignment is only /// in the file until the file is saved, re-read, and committed. pub(super) fn mark_unknown( diff --git a/server/src/processing/tests.rs b/server/src/processing/tests.rs index 5020b846..f5097e0d 100644 --- a/server/src/processing/tests.rs +++ b/server/src/processing/tests.rs @@ -1320,20 +1320,6 @@ fn test_doc_block_html_to_markdown_1() { // newly-created, still-empty block, converted to Markdown, then that Markdown // converted back to HTML the way the Server's re-translation does. // -// TinyMCE marks an otherwise-empty block by placing a `
` inside it, since a block with no content at all can't -// hold the caret. Markdown has no such placeholder, so each empty block must be -// expressible in Markdown some other way -- or the block the user just created -// vanishes on the round trip, before they can type anything into it. The blocks -// whose Markdown syntax can't stand alone when empty are rewritten during -// dehydration, replacing the `
` with a non-breaking space -- inside a -// paragraph, for the blocks which can't hold that character directly; see -// `empty_block_needs_placeholder` and -// `empty_block_needs_placeholder_paragraph` in -// [processing.rs](../processing.rs). The cases below cover the blocks a user can -// empty out in the editor, both those which need that rewrite and those which -// survive without it. -// // This test deliberately doesn't pin down the exact Markdown produced, since // more than one encoding of an empty block is reasonable. It checks only that // the round trip preserves the document's structure and its text. @@ -2252,7 +2238,7 @@ fn test_dehydrate_html_1() { ); // A trailing empty paragraph (`


`) is converted to - // `

 

` by `dehydrating_walk_node`, preserving it as a + // `


` by `dehydrating_walk_node`, preserving it as a // non-breaking space. assert_eq!( converter diff --git a/server/src/webserver.rs b/server/src/webserver.rs index f0b793d3..459fb96f 100644 --- a/server/src/webserver.rs +++ b/server/src/webserver.rs @@ -483,8 +483,8 @@ const WEBSOCKET_PING_DELAY: Duration = Duration::from_secs(2); pub const RESERVED_MESSAGE_ID: f64 = 0.0; /// The initial value for the server's message ID. pub const INITIAL_MESSAGE_ID: f64 = RESERVED_MESSAGE_ID + 3.0; -// The initial value for a Client. This value **must** be the same on the -// Client. This is a manual process, since +// The initial websocket message ID for a Client. This value **must** be the +// same on the Client. This is a manual process, since // [ts-rs](https://docs.rs/ts-rs/latest/ts_rs/) only generates types, not // constants. pub const INITIAL_CLIENT_MESSAGE_ID: f64 = INITIAL_MESSAGE_ID + 1.0; @@ -752,7 +752,6 @@ pub fn get_client_framework( } // ### Serve file -// /// A filesystem route hands its handler the file's path percent-decoded, with /// the separator which `path_to_url` dropped still missing. Restore it, so that /// the result names the same file the URL was built from. Every route which @@ -766,9 +765,9 @@ pub fn request_path_to_file_path( // Output: the path, ready to canonicalize. ) -> String { if cfg!(target_os = "windows") { - // HTTP doesn't treat a backslash as a path separator, but Windows - // does. Re-encode any backslash, so that both agree on where this - // path's components divide. + // HTTP doesn't treat a backslash as a path separator, but Windows does. + // Re-encode any backslash, so that both agree on where this path's + // components divide. let backslashes_encoded = request_file_path.replace('\\', "%5C"); // A Windows path begins with a drive letter, unless it names a network // share: `path_to_url` spells a UNC path as `//server/share/...`, and @@ -782,8 +781,8 @@ pub fn request_path_to_file_path( } else { // Restore the leading slash which the route's match absorbed. An // unsaved file has no location on disk, so `try_canonicalize` leaves - // its path relative; `url_to_path` prepends the slash to that path - // too, so both conversions name such a file the same way. + // its path relative; `url_to_path` prepends the slash to that path too, + // so both conversions name such a file the same way. format!("/{request_file_path}") } } diff --git a/toc.md b/toc.md index 2ad73b9d..364ff3d2 100644 --- a/toc.md +++ b/toc.md @@ -37,6 +37,7 @@ Implementation * [vscode.rs](server/src/ide/vscode.rs) * [translation.rs](server/src/translation.rs) * [processing.rs](server/src/processing.rs) + * [Cache spec](server/src/processing/cache-spec.md) * [cache.rs](server/src/processing/cache.rs) * Tests * [Test utilities](test_utils/readme.md)